using Newtonsoft.Json; namespace Pilz.Configuration; [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)] [JsonConverter(typeof(SettingsValueOptionJsonConverter))] public class SettingsValueOption : 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 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(); } }