105 lines
3.3 KiB
C#
105 lines
3.3 KiB
C#
using System;
|
|
|
|
namespace Unosquare.Swan.Attributes {
|
|
/// <summary>
|
|
/// Models an option specification.
|
|
/// Based on CommandLine (Copyright 2005-2015 Giacomo Stelluti Scala and Contributors.).
|
|
/// </summary>
|
|
[AttributeUsage(AttributeTargets.Property)]
|
|
public sealed class ArgumentOptionAttribute
|
|
: Attribute {
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="ArgumentOptionAttribute"/> class.
|
|
/// The default long name will be inferred from target property.
|
|
/// </summary>
|
|
public ArgumentOptionAttribute()
|
|
: this(String.Empty, String.Empty) {
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="ArgumentOptionAttribute"/> class.
|
|
/// </summary>
|
|
/// <param name="longName">The long name of the option.</param>
|
|
public ArgumentOptionAttribute(String longName)
|
|
: this(String.Empty, longName) {
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="ArgumentOptionAttribute"/> class.
|
|
/// </summary>
|
|
/// <param name="shortName">The short name of the option.</param>
|
|
/// <param name="longName">The long name of the option or null if not used.</param>
|
|
public ArgumentOptionAttribute(Char shortName, String longName)
|
|
: this(new String(shortName, 1), longName) {
|
|
}
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="ArgumentOptionAttribute"/> class.
|
|
/// </summary>
|
|
/// <param name="shortName">The short name of the option..</param>
|
|
public ArgumentOptionAttribute(Char shortName)
|
|
: this(new String(shortName, 1), String.Empty) {
|
|
}
|
|
|
|
private ArgumentOptionAttribute(String shortName, String longName) {
|
|
this.ShortName = shortName ?? throw new ArgumentNullException(nameof(shortName));
|
|
this.LongName = longName ?? throw new ArgumentNullException(nameof(longName));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets long name of this command line option. This name is usually a single English word.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The long name.
|
|
/// </value>
|
|
public String LongName {
|
|
get;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets a short name of this command line option, made of one character.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The short name.
|
|
/// </value>
|
|
public String ShortName {
|
|
get;
|
|
}
|
|
|
|
/// <summary>
|
|
/// When applying attribute to <see cref="System.Collections.Generic.IEnumerable{T}"/> target properties,
|
|
/// it allows you to split an argument and consume its content as a sequence.
|
|
/// </summary>
|
|
public Char Separator { get; set; } = '\0';
|
|
|
|
/// <summary>
|
|
/// Gets or sets mapped property default value.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The default value.
|
|
/// </value>
|
|
public Object DefaultValue {
|
|
get; set;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether a command line option is required.
|
|
/// </summary>
|
|
/// <value>
|
|
/// <c>true</c> if required; otherwise, <c>false</c>.
|
|
/// </value>
|
|
public Boolean Required {
|
|
get; set;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets or sets a short description of this command line option. Usually a sentence summary.
|
|
/// </summary>
|
|
/// <value>
|
|
/// The help text.
|
|
/// </value>
|
|
public String HelpText {
|
|
get; set;
|
|
}
|
|
}
|
|
} |