using System.Management.Automation; using NozCli.Core.Client; using NozCli.Core.Config; namespace Noz.PowerShell; public abstract class NozCmdletBase : PSCmdlet { protected LocalConfig Config { get; private set; } = null!; protected NozApiClient Api { get; private set; } = null!; protected override void BeginProcessing() { var cfg = LocalConfig.Load(); if (cfg is null) ThrowTerminatingError(new ErrorRecord( new InvalidOperationException( "noz is not initialized. Run: noz init "), "NozNotInitialized", ErrorCategory.NotSpecified, targetObject: null)); Config = cfg!; Api = new NozApiClient(cfg!); } protected override void StopProcessing() => Api?.Dispose(); protected T Run(Task task) { try { return task.GetAwaiter().GetResult(); } catch (HttpRequestException ex) when (ex.StatusCode == System.Net.HttpStatusCode.Unauthorized) { ThrowTerminatingError(new ErrorRecord(ex, "NozUnauthorized", ErrorCategory.AuthenticationError, null)); throw; } catch (HttpRequestException ex) { ThrowTerminatingError(new ErrorRecord(ex, "NozApiError", ErrorCategory.ConnectionError, null)); throw; } } protected void Run(Task task) => Run(task.ContinueWith(_ => true)); }