Ejemplo n.º 1
0
        /// <summary>
        /// Adds a new Value to set the Uri? specified by <paramref name="expression"/>. By default this Value is not required.
        /// </summary>
        /// <param name="expression">The property.</param>
        /// <param name="config">The action to configure the Value.</param>
        /// <returns>A configured Value.</returns>
        public Value <TClass, Uri?> AddValueNullable(Expression <Func <TClass, Uri?> > expression, Action <NamelessArgConfig <TClass, Uri?> > config)
        {
            var obj = new NamelessArgConfig <TClass, Uri?>(false, ToAbsoluteNullableUri);

            config(obj);
            return(AddValueCore(expression, obj));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Adds a new Value to set the ulong specified by <paramref name="expression"/>. By default this Value is required.
        /// </summary>
        /// <param name="expression">The property.</param>
        /// <param name="config">The action to configure the Value.</param>
        /// <returns>A configured Value.</returns>
        public Value <TClass, ulong> AddValue(Expression <Func <TClass, ulong> > expression, Action <NamelessArgConfig <TClass, ulong> > config)
        {
            var obj = new NamelessArgConfig <TClass, ulong>(true, ToULong);

            config(obj);
            return(AddValueCore(expression, obj));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Adds a new Value to set the TEnum? specified by <paramref name="expression"/>. By default this Value is not required.
        /// </summary>
        /// <param name="expression">The property.</param>
        /// <param name="config">The action to configure the Value.</param>
        /// <returns>A configured Value.</returns>
        public Value <TClass, TEnum?> AddValue <TEnum>(Expression <Func <TClass, TEnum?> > expression, Action <NamelessArgConfig <TClass, TEnum?> > config) where TEnum : struct, Enum
        {
            var obj = new NamelessArgConfig <TClass, TEnum?>(false, (x) => ToNullableEnum <TEnum>(x, this.config.IsCaseSensitive));

            config(obj);
            return(AddValueCore(expression, obj));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Adds a new Value to set the Guid? specified by <paramref name="expression"/>. By default this Value is not required.
        /// </summary>
        /// <param name="expression">The property.</param>
        /// <param name="config">The action to configure the Value.</param>
        /// <returns>A configured Value.</returns>
        public Value <TClass, Guid?> AddValue(Expression <Func <TClass, Guid?> > expression, Action <NamelessArgConfig <TClass, Guid?> > config)
        {
            var obj = new NamelessArgConfig <TClass, Guid?>(false, ToNullableGuid);

            config(obj);
            return(AddValueCore(expression, obj));
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Adds a new Value to set the string? specified by <paramref name="expression"/>. By default this Value is not required.
        /// </summary>
        /// <param name="expression">The property.</param>
        /// <param name="config">The action to configure the Value.</param>
        /// <returns>A configured Value.</returns>
        public Value <TClass, string?> AddValueNullable(Expression <Func <TClass, string?> > expression, Action <NamelessArgConfig <TClass, string?> > config)
        {
            var obj = new NamelessArgConfig <TClass, string?>(false, NoConversionNullable);

            config(obj);
            return(AddValueCore(expression, obj));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Adds a new Value to set the Uri specified by <paramref name="expression"/>. By default this Value is required.
        /// </summary>
        /// <param name="expression">The property.</param>
        /// <param name="config">The action to configure the Value.</param>
        /// <returns>A configured Value.</returns>
        public Value <TClass, Uri> AddValue(Expression <Func <TClass, Uri> > expression, Action <NamelessArgConfig <TClass, Uri> > config)
        {
            var obj = new NamelessArgConfig <TClass, Uri>(true, ToAbsoluteUri);

            config(obj);
            return(AddValueCore(expression, obj));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Adds a new Value to set the TimeSpan specified by <paramref name="expression"/>. By default this Value is required.
        /// </summary>
        /// <param name="expression">The property.</param>
        /// <param name="config">The action to configure the Value.</param>
        /// <returns>A configured Value.</returns>
        public Value <TClass, TimeSpan> AddValue(Expression <Func <TClass, TimeSpan> > expression, Action <NamelessArgConfig <TClass, TimeSpan> > config)
        {
            var obj = new NamelessArgConfig <TClass, TimeSpan>(true, ToTimeSpan);

            config(obj);
            return(AddValueCore(expression, obj));
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Adds a new Value to set the decimal specified by <paramref name="expression"/>. By default this Value is required.
        /// </summary>
        /// <param name="expression">The property.</param>
        /// <param name="config">The action to configure the Value.</param>
        /// <returns>A configured Value.</returns>
        public Value <TClass, decimal> AddValue(Expression <Func <TClass, decimal> > expression, Action <NamelessArgConfig <TClass, decimal> > config)
        {
            var obj = new NamelessArgConfig <TClass, decimal>(true, ToDecimal);

            config(obj);
            return(AddValueCore(expression, obj));
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Adds a new Value.
        /// This is mainly useful to provide custom extension methods which take specific types of <typeparamref name="TProp"/>.
        /// </summary>
        /// <typeparam name="TProp">The type of the target property.</typeparam>
        /// <param name="expression">The property to set.</param>
        /// <param name="config">The configuration.</param>
        /// <returns>The created Value.</returns>
        public Value <TClass, TProp> AddValueCore <TProp>(Expression <Func <TClass, TProp> > expression, NamelessArgConfig <TClass, TProp> config)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config), nameof(config) + " cannot be null");
            }
            Action <TClass, TProp> setter = CliParserBuilder.GetSetMethodDelegateFromExpression(expression, out PropertyInfo pi);

            if (config.Converter == null)
            {
                throw new CliParserBuilderException(string.Concat("You need to provide a converter for the property ", pi.Name, " of the class ", typeof(TClass).Name));
            }
            config.configuredDependencies?.Validate();
            ArgumentRequired      ar    = config.configuredDependencies != null ? ArgumentRequired.HasDependencies : config.Required ? ArgumentRequired.Required : ArgumentRequired.Optional;
            Value <TClass, TProp> thing = new(config.DescriptiveName ?? pi.Name, config.HelpText ?? "No help available.", ar, setter, config.DefaultValue, config.configuredDependencies, config.Converter);

            allValues.Add(thing);
            return(thing);
        }