public BaseOptionError(IOptionDetails optionDetails, string message)
     : base(message)
 {
     OptionDetails = optionDetails;
 }
Exemplo n.º 2
0
 public InvalidOptionValueError(IOptionDetails optionDetails, object value)
     : base(optionDetails, BuildMessage(optionDetails, value))
 {
 }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 6
0
        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);
        }