Exemplo n.º 1
0
        public static ISpec GenerateSpecByAttribute(
            SpecAttribute attr,
            Type objType,
            string defaultOptionName,
            ValueType defaultValueType,
            IValueSerializer?defaultValueSerializer)
        {
            ThrowUtil.ThrowIfArgumentNullOrWhiteSpace(defaultOptionName);

            if (attr is ArgumentAttribute argumentAttr)
            {
                return(new Argument(argumentAttr.ValueType != ValueType.Default ? argumentAttr.ValueType : defaultValueType,
                                    objType,
                                    argumentAttr.ValueName,
                                    argumentAttr.Desc,
                                    argumentAttr.Priority, argumentAttr.Serializer ?? defaultValueSerializer));
            }

            var    optionAttr = (OptionAttribute)attr;
            char?  shortName  = optionAttr.ShortName != null ? optionAttr.ShortName[0] : (defaultOptionName.Length == 1 ? defaultOptionName[0] : null);
            string?longName   = optionAttr.LongName ?? (shortName == null && defaultOptionName.Length > 1 ? defaultOptionName : null);

            return(new Option(
                       shortName,
                       longName,
                       optionAttr.ValueType != ValueType.Default ? optionAttr.ValueType : defaultValueType,
                       objType,
                       optionAttr.ValueName,
                       optionAttr.Desc,
                       optionAttr.Serializer ?? defaultValueSerializer));
        }