public BaseOptionError(IOptionDetails optionDetails, string message) : base(message) { OptionDetails = optionDetails; }
public InvalidOptionValueError(IOptionDetails optionDetails, object value) : base(optionDetails, BuildMessage(optionDetails, value)) { }
private static string BuildMessage(IOptionDetails optionDetails, object value) { Guard.IsNotNull(() => optionDetails); return(string.Format("{0} '{1}' value is invalid: '{2}'", optionDetails.OptionType, optionDetails.Name, value)); }
public RequiredOptionMissingError(IOptionDetails optionDetails) : base(optionDetails, BuildMessage(optionDetails)) { OptionDetails = optionDetails; }
private static string BuildMessage(IOptionDetails optionDetails) { Guard.IsNotNull(() => optionDetails); return(string.Format("{0}: '{1}' is required", optionDetails.OptionType, optionDetails.Name)); }
public ParserResult <T> Parse <T>(IList <string> args) where T : new() { var optionsInstance = new T(); var optionDetailsList = OptionDetails.Build(typeof(T)); var errors = new List <IParserError>(); Validate(errors, optionDetailsList); if (!errors.Any()) { ApplyDefaultValues(errors, optionsInstance, optionDetailsList); } if (!errors.Any()) { var position = 0; IOptionDetails currentOption = null; foreach (var arg in args) { if (string.IsNullOrEmpty(arg)) { continue; } if (currentOption != null) { try { currentOption.SetValue(optionsInstance, arg); } catch (Exception) { errors.Add(new InvalidOptionValueError(currentOption, arg)); } currentOption = null; continue; } if (IsLongOption(Configuration, arg)) { var optionName = arg.Before("="); currentOption = FindOption(optionDetailsList, optionName); if (currentOption == null) { errors.Add(new UnknownOptionError(arg)); } } if (IsShortOption(Configuration, arg)) { var optionName = ExtractOptionName(Configuration, arg); currentOption = FindOption(optionDetailsList, optionName); if (currentOption == null) { errors.Add(new UnknownOptionError(optionName)); } continue; } // Find Parameter var parameter = FindParameter(optionDetailsList, position); if (parameter == null) { errors.Add(new UnknownParameterError(position)); continue; } try { parameter.SetValue(optionsInstance, arg); } catch (Exception ex) { Debug.WriteLine(ex.Message); errors.Add(new InvalidOptionValueError(parameter, arg)); } ++position; } } var result = new ParserResult <T>( optionsInstance, Configuration, optionDetailsList, errors ); return(result); }