in src/Models/Argument/ArgumentDefinition.cs [9:55]
public class ArgumentDefinition<T>(string name, string description, string? value = "", T? defaultValue = default, bool required = false, bool hidden = false)
where T : notnull
{
[JsonPropertyName("name")]
public string Name { get; set; } = name;
[JsonPropertyName("description")]
public string Description { get; set; } = description;
[JsonPropertyName("value")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault | JsonIgnoreCondition.WhenWritingNull)]
public string Value { get; set; } = string.IsNullOrEmpty(value) ? null! : value;
[JsonPropertyName("default")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public T? DefaultValue { get; set; } = defaultValue;
[JsonPropertyName("type")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public string Type { get; set; } = typeof(T).Name.ToLowerInvariant();
[JsonPropertyName("required")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public bool Required { get; set; } = required;
[JsonPropertyName("hidden")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public bool Hidden { get; set; } = hidden;
public Option<T> ToOption()
{
var option = new Option<T>($"--{Name}", Description);
if (DefaultValue != null)
{
option.SetDefaultValue(DefaultValue);
}
option.IsRequired = Required;
option.IsHidden = Hidden;
return option;
}
public JsonPropertyNameAttribute ToJsonAttribute()
{
return new JsonPropertyNameAttribute(Name);
}
}