public void Set(string?value, ParserState args, IValueParser valueParser) { if (value == null) { value = DefaultValue(); } if (value == null && args.HasCurrent) { value = args.Consume(); } if (value == null) { throw new CommandLineException(args, $"Value is missing for {this}."); } Set(value, valueParser); }
public async Task <object?[]> Run() { var results = new List <object?>(); var args = new ParserState(Operands.ToArray()); if (!args.HasCurrent) { var defaultCommand = DefaultCommand; if (defaultCommand == null) { throw new NoDefaultCommandException(); } else { results.Add(await defaultCommand.Invoke(args, valueParser)); } } else { while (args.HasCurrent) { var defaultCommand = DefaultCommand; if (defaultCommand == null) { var commandName = args.Current; var command = commandProvider.GetCommand(commandName); args.Consume(); results.Add(await command.Invoke(args, valueParser)); } else { // command found? // execute // else // execute default command // check that is consumes arguments to avoid endless loop var commandName = args.Current; var command = commandProvider.TryGetCommand(commandName); if (command is { })