internal static bool TryGetValueForOption( this CommandResult commandResult, IValueDescriptor valueDescriptor, out object?value) { var children = commandResult .Children .Where(o => valueDescriptor.ValueName?.IsMatch(o.Symbol) == true) .ToArray(); SymbolResult?symbolResult = null; if (children.Length > 1) { throw new ArgumentException( $"Ambiguous match while trying to bind parameter {valueDescriptor.ValueName} among: {string.Join(",", children.Select(o => o.Symbol.Name))}"); } if (children.Length == 1) { symbolResult = children[0]; } if (symbolResult is OptionResult optionResult) { if (optionResult.ConvertIfNeeded(valueDescriptor.ValueType) is SuccessfulArgumentConversionResult successful) { value = successful.Value; return(true); } } value = null; return(false); }
private protected SymbolResult( ISymbol symbol, SymbolResult?parent) { Symbol = symbol ?? throw new ArgumentNullException(nameof(symbol)); Parent = parent; }
internal ParseError(string message, SymbolResult?symbolResult = null) { if (string.IsNullOrWhiteSpace(message)) { throw new ArgumentException("Value cannot be null or whitespace.", nameof(message)); } Message = message; SymbolResult = symbolResult; }
private static SymbolResult GetSymbolResult <T>(Argument <T> argumeent, ParseResult parseResult, CommandResult?commmandResult) { SymbolResult?symbolResult = null; while (!(commmandResult is null) && symbolResult is null) { symbolResult = parseResult.RootCommandResult.FindResultFor(argumeent); commmandResult = commmandResult.Parent as CommandResult; } return(symbolResult); }
private static SymbolResult GetSymbolResult <T>(Option <T> option, ParseResult parseResult, CommandResult?commmandResult) { SymbolResult?symbolResult = null; while (!(commmandResult is null) && symbolResult is null) { symbolResult = parseResult.RootCommandResult.FindResultFor(option); commmandResult = commmandResult.Parent as CommandResult; } return(symbolResult); }
internal static FailedArgumentConversionArityResult?Validate( SymbolResult?symbolResult, IArgument argument, int minimumNumberOfValues, int maximumNumberOfValues) { var argumentResult = symbolResult switch { CommandResult commandResult => commandResult.Root?.FindResultFor(argument), OptionResult optionResult => optionResult.Children.ResultFor(argument), _ => symbolResult }; var tokenCount = argumentResult?.Tokens.Count ?? 0; if (tokenCount < minimumNumberOfValues) { if (symbolResult !.UseDefaultValueFor(argument)) { return(null); } return(new MissingArgumentConversionResult( argument, symbolResult.ValidationMessages.RequiredArgumentMissing(symbolResult))); } if (tokenCount > maximumNumberOfValues) { return(new TooManyArgumentsConversionResult( argument, symbolResult !.ValidationMessages.ExpectsOneArgument(symbolResult))); } return(null); }
internal ArgumentResult( IArgument argument, SymbolResult?parent) : base(argument, parent) { Argument = argument; }