/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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); }