using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; namespace CliFx.Binding; /// /// Describes a binding between a CLR type and a command. /// public class CommandDescriptor( [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] Type type, string? name, string? description, IReadOnlyList examples, IReadOnlyList inputs ) { /// /// CLR type of the command. /// [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] public Type Type { get; } = type; /// public string? Name { get; } = name; internal bool IsDefault => string.IsNullOrWhiteSpace(Name); /// public string? Description { get; } = description; /// public IReadOnlyList Examples { get; } = examples; /// /// Inputs (parameters and options) of the command; /// public IReadOnlyList Inputs { get; } = inputs; internal IReadOnlyList Parameters { get; } = inputs.OfType().ToArray(); internal IReadOnlyList Options { get; } = inputs.OfType().ToArray(); internal bool MatchesName(string? name) => !string.IsNullOrWhiteSpace(Name) ? string.Equals(name, Name, StringComparison.OrdinalIgnoreCase) : string.IsNullOrWhiteSpace(name); /// public override string ToString() => !string.IsNullOrWhiteSpace(Name) ? Name : ""; } /// /// /// Generic version used by source-generated code for static type references and AOT compatibility. /// public class CommandDescriptor< [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] TCommand >( string? name, string? description, IReadOnlyList examples, IReadOnlyList inputs ) : CommandDescriptor(typeof(TCommand), name, description, examples, inputs) where TCommand : ICommand;