//
// 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();
}
}
}