50 lines
1.0 KiB
C#
50 lines
1.0 KiB
C#
using Newtonsoft.Json;
|
|
|
|
namespace Pilz.Configuration;
|
|
|
|
[JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
|
|
[JsonConverter(typeof(SettingsValueOptionJsonConverter))]
|
|
public class SettingsValueOption<T> : ISettingsValueOptionValueAccessor where T : struct
|
|
{
|
|
protected T? value;
|
|
|
|
public T DefaultValue { get; }
|
|
public virtual bool IsDefault => value == null;
|
|
|
|
public SettingsValueOption()
|
|
{
|
|
}
|
|
|
|
public SettingsValueOption(T value)
|
|
{
|
|
this.value = DefaultValue = value;
|
|
}
|
|
|
|
public virtual T Value
|
|
{
|
|
get => value ?? DefaultValue;
|
|
set => this.value = value;
|
|
}
|
|
|
|
public static implicit operator T(SettingsValueOption<T> option)
|
|
{
|
|
return option.Value;
|
|
}
|
|
|
|
object ISettingsValueOptionValueAccessor.ValueRaw
|
|
{
|
|
get => value;
|
|
set => this.value = (T?)(T)value;
|
|
}
|
|
|
|
public virtual void Reset()
|
|
{
|
|
value = null;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return Value.ToString();
|
|
}
|
|
}
|