// // Program.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using Microsoft.Extensions.DependencyInjection; using NosSmooth.Injector.CLI.Commands; using Remora.Commands.Extensions; using Remora.Commands.Services; using Remora.Results; namespace NosSmooth.Injector.CLI { /// /// The entrypoint class. /// public static class Program { /// /// The entrypoint method. /// /// The command line arguments. /// A task that may or may not have succeeded. public static async Task Main(string[] argv) { var services = CreateServices(); var commandService = services.GetRequiredService(); var preparedCommandResult = await commandService.TryPrepareCommandAsync(string.Join(' ', argv), services); if (!preparedCommandResult.IsSuccess) { Console.Error.WriteLine($"There was an error, {preparedCommandResult.Error.Message}"); return; } if (preparedCommandResult.Entity is null) { Console.Error.WriteLine("You must enter a command such ast list or inject."); return; } var executionResult = await commandService.TryExecuteAsync(preparedCommandResult.Entity, services); if (!executionResult.Entity.IsSuccess) { switch (executionResult.Entity.Error) { case ExceptionError exc: Console.Error.WriteLine($"There was an exception, {exc.Exception.Message}"); break; default: Console.Error.WriteLine($"There was an error, {executionResult.Entity.Error!.Message}"); break; } return; } } private static IServiceProvider CreateServices() { var collection = new ServiceCollection(); collection .AddSingleton() .AddOptions(); collection .AddCommands() .AddCommandTree() .WithCommandGroup() .WithCommandGroup(); return collection.BuildServiceProvider(); } } }