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]