2023-06-29 14:57:11 +08:00
|
|
|
|
namespace BITKit
|
2023-06-05 19:57:17 +08:00
|
|
|
|
{
|
|
|
|
|
public interface IOptional
|
|
|
|
|
{
|
|
|
|
|
bool Allow { get; }
|
|
|
|
|
object Value { get; }
|
|
|
|
|
}
|
|
|
|
|
public interface IOptional<T>
|
|
|
|
|
{
|
|
|
|
|
bool Allow { get; }
|
|
|
|
|
T Value { get; }
|
|
|
|
|
}
|
|
|
|
|
[System.Serializable]
|
|
|
|
|
public record Optional<T> : IOptional<T>
|
|
|
|
|
{
|
|
|
|
|
#if UNITY
|
|
|
|
|
[UnityEngine.SerializeField]
|
|
|
|
|
bool allow;
|
|
|
|
|
[UnityEngine.SerializeField]
|
|
|
|
|
T value;
|
|
|
|
|
#else
|
|
|
|
|
bool allow;
|
|
|
|
|
T value;
|
|
|
|
|
#endif
|
|
|
|
|
public bool Allow { get => allow; set => allow = value;}
|
|
|
|
|
public T Value { get => value; set => this.value = value; }
|
|
|
|
|
public void SetValueThenAllow(T newValue) => value = newValue;
|
|
|
|
|
public void Clear()
|
|
|
|
|
{
|
|
|
|
|
Allow = false;
|
|
|
|
|
value = default;
|
|
|
|
|
}
|
2023-06-07 18:38:07 +08:00
|
|
|
|
|
|
|
|
|
public static implicit operator T(Optional<T> self)
|
|
|
|
|
{
|
|
|
|
|
return self.value;
|
|
|
|
|
}
|
2023-06-05 19:57:17 +08:00
|
|
|
|
}
|
|
|
|
|
}
|