using System; namespace FullSerializer.Internal { /// /// Simple option type. This is akin to nullable types. /// public struct fsOption { private bool _hasValue; private T _value; public bool HasValue { get { return _hasValue; } } public bool IsEmpty { get { return _hasValue == false; } } public T Value { get { if (IsEmpty) throw new InvalidOperationException("fsOption is empty"); return _value; } } public fsOption(T value) { _hasValue = true; _value = value; } public static fsOption Empty; } public static class fsOption { public static fsOption Just(T value) { return new fsOption(value); } } }