using System.Diagnostics.CodeAnalysis; namespace Nub.Core; public readonly struct Optional { public static Optional Empty() => new(); /// /// Alias for creating an Optional<TValue> which allows for implicit types /// /// /// /// public static Optional OfNullable(TValue? value) { return value ?? Optional.Empty(); } } public readonly struct Optional { public static Optional Empty() => new(); public static Optional OfNullable(TValue? value) { return value ?? Empty(); } public Optional() { Value = default; HasValue = false; } public Optional(TValue value) { Value = value; HasValue = true; } public TValue? Value { get; } [MemberNotNullWhen(true, nameof(Value))] public bool HasValue { get; } public static implicit operator Optional(TValue value) => new(value); }