From 1df38902f21188ce1d9181c964a455460e7b756b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 30 May 2026 16:02:20 +0000 Subject: [PATCH 1/2] Initial plan From 90f8ee0284a0ec317e150634407b56ba08247adb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 30 May 2026 16:07:17 +0000 Subject: [PATCH 2/2] feat: add public optional value interface --- src/OptionalValues/IOptionalValue.cs | 12 ++++++++++++ .../Internal/IOptionalValueInternals.cs | 6 ++---- src/OptionalValues/PublicAPI.Unshipped.txt | 3 +++ .../OptionalValues.Tests/OptionalValueTest.cs | 19 +++++++++++++++++++ 4 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 src/OptionalValues/IOptionalValue.cs 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]