diff --git a/src/Ardalis.Result.AspNetCore/MinimalApiResultExtensions.cs b/src/Ardalis.Result.AspNetCore/MinimalApiResultExtensions.cs index da3f558..fcf0dc3 100644 --- a/src/Ardalis.Result.AspNetCore/MinimalApiResultExtensions.cs +++ b/src/Ardalis.Result.AspNetCore/MinimalApiResultExtensions.cs @@ -25,7 +25,13 @@ public static partial class ResultExtensions /// public static Microsoft.AspNetCore.Http.IResult ToMinimalApiResult(this Result result) => ToMinimalApiResult((IResult)result); - internal static Microsoft.AspNetCore.Http.IResult ToMinimalApiResult(this IResult result) => + /// + /// Convert an Ardalis.Result to a . + /// Exposed so consumers can write a custom converter that handles selected statuses and delegates the + /// remaining statuses to the library's default mapping. + /// + /// The Ardalis.Result to convert. + public static Microsoft.AspNetCore.Http.IResult ToMinimalApiResult(this IResult result) => result.Status switch { ResultStatus.Ok => result is Result ? Results.Ok() : Results.Ok(result.GetValue()), diff --git a/tests/Ardalis.Result.AspNetCore.UnitTests/MinimalApiResultExtensionsCoverage.cs b/tests/Ardalis.Result.AspNetCore.UnitTests/MinimalApiResultExtensionsCoverage.cs index d36038c..1af5a75 100644 --- a/tests/Ardalis.Result.AspNetCore.UnitTests/MinimalApiResultExtensionsCoverage.cs +++ b/tests/Ardalis.Result.AspNetCore.UnitTests/MinimalApiResultExtensionsCoverage.cs @@ -41,5 +41,19 @@ public void ToMinimalApiResultHandlesAllResultStatusValues() } } } + + [Fact] + public void IResultOverloadIsPubliclyCallableAndDelegatesToTypedOverload() + { + // Casting to the Ardalis.Result IResult interface and calling the (now public) overload directly + // must compile and behave the same as calling it on the concrete Result. + Result result = Result.Success(42); + IResult asInterface = result; + + Microsoft.AspNetCore.Http.IResult viaInterface = asInterface.ToMinimalApiResult(); + Microsoft.AspNetCore.Http.IResult viaConcrete = result.ToMinimalApiResult(); + + Assert.Equal(viaConcrete.GetType(), viaInterface.GetType()); + } } #endif \ No newline at end of file