diff --git a/src/Coderynx.Functional.WebApi/ResultExtensions.cs b/src/Coderynx.Functional.WebApi/ResultExtensions.cs
index 2d03b86..d464a97 100644
--- a/src/Coderynx.Functional.WebApi/ResultExtensions.cs
+++ b/src/Coderynx.Functional.WebApi/ResultExtensions.cs
@@ -18,7 +18,9 @@ public static class ResultExtensions
/// An IResult representing the appropriate HTTP response based on the Result state.
public static IResult ToHttpResult(this Result result)
{
- return ToHttpResultInternal(result, null);
+ return result.IsFailure ?
+ result.ToHttpErrorResult() :
+ ToHttpSuccessResult(result, null);
}
///
@@ -29,9 +31,17 @@ public static IResult ToHttpResult(this Result result)
/// An IResult representing the appropriate HTTP response based on the Result state.
public static IResult ToHttpResult(this Result result)
{
- return result.Success.Value is not null
- ? ToHttpResultInternal(result, result.Value)
- : ToHttpResultInternal(result, null);
+ if (result.IsFailure)
+ {
+ return result.ToHttpErrorResult();
+ }
+
+ if (result.Success.Value is null)
+ {
+ return ToHttpSuccessResult(result, null);
+ }
+
+ return ToHttpSuccessResult(result, result.Value);
}
///
@@ -43,45 +53,34 @@ public static IResult ToHttpResult(this Result result)
/// An IResult representing the appropriate HTTP response based on the Result state.
public static IResult ToHttpResult(this Result result, Func transform)
{
+ if (result.IsFailure)
+ {
+ return result.ToHttpErrorResult();
+ }
+
if (result.Success.Value is null)
{
- return ToHttpResultInternal(result, null);
+ return ToHttpSuccessResult(result, null);
}
var transformerResult = transform(result.Value);
- return ToHttpResultInternal(result, transformerResult);
+ return ToHttpSuccessResult(result, transformerResult);
}
- ///
- /// Internal helper method to convert a Result to an HTTP response.
- ///
- /// The Result to convert.
- /// The value to include in the response (if applicable).
- /// An appropriate IResult based on the Result's Success or Error state.
- private static IResult ToHttpResultInternal(Result result, object? value)
+ private static IResult ToHttpSuccessResult(Result result, object? value)
{
- if (result.IsSuccess)
+ return result.Success.Kind switch
{
- return result.Success.Kind switch
- {
- SuccessKind.Created => Microsoft.AspNetCore.Http.Results.Ok(value),
- SuccessKind.Updated => Microsoft.AspNetCore.Http.Results.NoContent(),
- SuccessKind.Deleted => Microsoft.AspNetCore.Http.Results.NoContent(),
- SuccessKind.Found => Microsoft.AspNetCore.Http.Results.Ok(value),
- SuccessKind.Accepted => Microsoft.AspNetCore.Http.Results.Accepted(),
- _ => Microsoft.AspNetCore.Http.Results.Ok()
- };
- }
-
- return result.ToProblem();
+ SuccessKind.Created => Microsoft.AspNetCore.Http.Results.Ok(value),
+ SuccessKind.Updated => Microsoft.AspNetCore.Http.Results.NoContent(),
+ SuccessKind.Deleted => Microsoft.AspNetCore.Http.Results.NoContent(),
+ SuccessKind.Found => Microsoft.AspNetCore.Http.Results.Ok(value),
+ SuccessKind.Accepted => Microsoft.AspNetCore.Http.Results.Accepted(),
+ _ => Microsoft.AspNetCore.Http.Results.Ok()
+ };
}
- ///
- /// Converts a failed Result to a ProblemDetails HTTP response.
- ///
- /// The Result containing an error.
- /// An IResult representing a problem details response based on the error information.
- private static IResult ToProblem(this Result result)
+ private static IResult ToHttpErrorResult(this Result result)
{
var details = new ProblemDetails
{
diff --git a/src/Coderynx.Functional.WebApi/version.json b/src/Coderynx.Functional.WebApi/version.json
index f10c8be..e507d8e 100644
--- a/src/Coderynx.Functional.WebApi/version.json
+++ b/src/Coderynx.Functional.WebApi/version.json
@@ -1,6 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json",
- "version": "1.4.3",
+ "version": "1.4.4",
"publicReleaseRefSpec": [
"^refs/heads/main$"
],