📄 src/Reviewer.Cli/InputOptions.cs
using System.ComponentModel.DataAnnotations;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;

namespace Reviewer.Cli;

internal sealed class InputOptions
{
    [Required]
    public required string RepositoryPath { get; set; }

    [Required]
    public required string CommitHash { get; set; }
}

[OptionsValidator]
internal sealed partial class InputOptionsValidator : IValidateOptions<InputOptions>;

internal static class InputOptionsServiceCollectionExtensions
{
    extension(IServiceCollection services)
    {
        public IServiceCollection AddInputOptions()
        {
            services
                .AddOptions<InputOptions>()
                .BindConfiguration("")
                .Validate<InputOptionsValidator>()
                .ValidateOnStart();
            return services;
        }
    }
}