diff --git a/src/OptionalValues/IOptionalValue.cs b/src/OptionalValues/IOptionalValue.cs new file mode 100644 index 0000000..5f9ff77 --- /dev/null +++ b/src/OptionalValues/IOptionalValue.cs @@ -0,0 +1,12 @@ +namespace OptionalValues; + +/// +/// Represents an optional value that may or may not be specified. +/// +public interface IOptionalValue +{ + /// + /// Whether the value is specified. + /// + bool IsSpecified { get; } +} diff --git a/src/OptionalValues/Internal/IOptionalValueInternals.cs b/src/OptionalValues/Internal/IOptionalValueInternals.cs index d8eec72..d0676ee 100644 --- a/src/OptionalValues/Internal/IOptionalValueInternals.cs +++ b/src/OptionalValues/Internal/IOptionalValueInternals.cs @@ -1,9 +1,7 @@ -namespace OptionalValues.Internal; +namespace OptionalValues.Internal; -internal interface IOptionalValueInternals +internal interface IOptionalValueInternals : IOptionalValue { - bool IsSpecified { get; } - object? GetValue(); object? GetSpecifiedValue(); diff --git a/src/OptionalValues/PublicAPI.Unshipped.txt b/src/OptionalValues/PublicAPI.Unshipped.txt index e69de29..4ae5f0c 100644 --- a/src/OptionalValues/PublicAPI.Unshipped.txt +++ b/src/OptionalValues/PublicAPI.Unshipped.txt @@ -0,0 +1,3 @@ +#nullable enable +OptionalValues.IOptionalValue +OptionalValues.IOptionalValue.IsSpecified.get -> bool \ No newline at end of file diff --git a/test/OptionalValues.Tests/OptionalValueTest.cs b/test/OptionalValues.Tests/OptionalValueTest.cs index 0bed92b..3714be2 100644 --- a/test/OptionalValues.Tests/OptionalValueTest.cs +++ b/test/OptionalValues.Tests/OptionalValueTest.cs @@ -55,6 +55,25 @@ public void Should_Be_True_For(string? value) } } + public class PublicInterface : OptionalValueTest + { + [Fact] + public void Should_Be_Implemented_By_OptionalValue() + { + IOptionalValue sut = new OptionalValue("Value"); + + sut.IsSpecified.ShouldBeTrue(); + } + + [Fact] + public void Should_Expose_Unspecified_State() + { + IOptionalValue sut = OptionalValue.Unspecified; + + sut.IsSpecified.ShouldBeFalse(); + } + } + public class Value : OptionalValueTest { [Fact]