// // 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.Data.CLI.Commands; using NosSmooth.Data.Database.Extensions; using NosSmooth.Data.NOSFiles.Extensions; using NosSmooth.Data.NOSFiles.Files; using NosSmooth.Data.NOSFiles.Readers; using NosSmooth.Data.NOSFiles.Readers.Types; using Remora.Commands.Extensions; using Remora.Commands.Services; using Remora.Results; namespace NosSmooth.Data.CLI; /// /// Entrypoint class. /// public class Program { /// /// Entrypoint method. /// /// The arguments. /// A representing the asynchronous operation. public static async Task Main(string[] arguments) { var services = CreateServices(); var commandService = services.GetRequiredService(); var preparedCommandResult = await commandService.TryPrepareCommandAsync(string.Join(' ', arguments), 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; } } } private static IServiceProvider CreateServices() { var collection = new ServiceCollection(); collection .AddNostaleDataParsing() .AddNostaleDatabaseMigrator() .AddCommands() .AddCommandTree() .WithCommandGroup() .WithCommandGroup(); return collection.BuildServiceProvider(); } }