private OptionAndValue SplitOptionAndValueString(string optionAndValueStr) { OptionAndValue optionAndValue = new OptionAndValue(); int separatorIdx = optionAndValueStr.IndexOf(":"); optionAndValue.Option = optionAndValueStr.Substring(0, separatorIdx); optionAndValue.Value = optionAndValueStr.Substring(separatorIdx + 1, optionAndValueStr.Length - (separatorIdx + 1)); return(optionAndValue); }
private void ProcessValueOption(string parameter) { string optionAndValueStr = this.StripOptionCharacter(parameter); OptionAndValue optionAndValue = this.SplitOptionAndValueString(optionAndValueStr); if (this.Strict) { this.AssertOptionNameIsKnown(optionAndValue.Option); } if (!this.IsOptionNameKnown(optionAndValue.Option)) { this.ApplyNonStrictOptionConfiguration(optionAndValue.Option, optionAndValue.Value); } else { this.ApplyOptionConfiguration( OptionsConfigurationHash[optionAndValue.Option], optionAndValue.Option, optionAndValue.Value ); } }
public bool TryProcessArguments(IVerb verb, IEnumerable <IOption> options, IEnumerable <string> arguments, out IEnumerable <OptionAndValue> optionValues, out IEnumerable <IError> errors) { if (verb == null) { throw new ArgumentNullException(nameof(verb)); } if (options == null) { throw new ArgumentNullException(nameof(options)); } if (arguments == null) { throw new ArgumentNullException(nameof(arguments)); } var positionalOptions = options.OfType <PositionalOptionAttribute>().ToArray(); var flagOptions = options.OfType <FlagOptionAttribute>().ToArray(); var namedCollectionOptions = options.OfType <NamedCollectionOptionAttribute>().ToArray(); var namedOptions = options.OfType <NamedOptionAttribute>().ToArray(); int positionalArgumentCount = 0; var argsArray = arguments.ToArray(); List <OptionAndValue> providedOptions = new List <OptionAndValue>(); for (int i = 0; i < argsArray.Length; i++) { var argument = argsArray[i]; var parameterName = _parameterFormatter.Parse(argument); if (HandleNamedOption(argsArray, ref i, parameterName, providedOptions, namedOptions)) { continue; } else if (HandleFlagOption(parameterName, providedOptions, flagOptions)) { continue; } else if (HandlePositionOption(argument, providedOptions, positionalOptions, ref positionalArgumentCount)) { continue; } else if (HandleNamedCollectionOption(argsArray, ref i, parameterName, providedOptions, namedCollectionOptions, flagOptions, namedOptions)) { continue; } { optionValues = new OptionAndValue[0]; errors = new IError[] { new OptionForArgumentNotFoundError(verb, argument, positionalArgumentCount) }; return(false); } } //check required parameters. foreach (var requiredOption in options.Where((o) => o.Required)) { var providedOption = providedOptions.FirstOrDefault((o) => o.Option == requiredOption); if (providedOption == null) { optionValues = new OptionAndValue[0]; errors = new IError[] { new RequiredParameterMissingError(verb, requiredOption.Name) }; return(false); } else if (providedOption.Option is NamedCollectionOptionAttribute collectionOption && providedOption.ValueAsList().Count < collectionOption.MinimumCount) { optionValues = new OptionAndValue[0]; errors = new IError[] { new NotEnoughElementsError(verb, collectionOption.Name, collectionOption.MinimumCount) }; return(false); } } optionValues = providedOptions; errors = new IError[0]; return(true); }