Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve OpenAPI docs #3

Merged
merged 11 commits into from
Jul 18, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ public class ResultExtensionsClassBuilder(List<string> requiredNamespaces, List<
new ToCreatedHttpResultTE(),
new ToFileHttpResultByteArrayE(),
new ToFileStreamHttpResultStreamE(),
new ToHttpResultTE(),
new ToNoContentHttpResultTE()
new ToJsonHttpResultTE(),
new ToNoContentHttpResultTE(),
new ToStatusCodeHttpResultTE(),
new ToOkHttpResultTE()
];
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
namespace CSharpFunctionalExtensions.HttpResults.Generators.ResultExtensions;

internal class ToHttpResultTE: IGenerateMethods
internal class ToJsonHttpResultTE: IGenerateMethods
{
public string Generate(string mapperClassName, string resultErrorType, string httpResultType)
{
return $$"""
/// <summary>
/// Returns a <see cref="JsonHttpResult{TValue}"/> in case of success result. Returns custom mapping in case of failure. You can override the success status code.
/// </summary>
public static Results<JsonHttpResult<T>, {{httpResultType}}> ToHttpResult<T>(this Result<T,{{resultErrorType}}> result, int successStatusCode = 200)
public static Results<JsonHttpResult<T>, {{httpResultType}}> ToJsonHttpResult<T>(this Result<T,{{resultErrorType}}> result, int successStatusCode = 200)
{
if (result.IsSuccess) return TypedResults.Json(result.Value, statusCode: successStatusCode);

Expand All @@ -18,9 +18,9 @@ public string Generate(string mapperClassName, string resultErrorType, string ht
/// <summary>
/// Returns a <see cref="JsonHttpResult{TValue}"/> in case of success result. Returns custom mapping in case of failure. You can override the success status code.
/// </summary>
public static async Task<Results<JsonHttpResult<T>, {{httpResultType}}>> ToHttpResult<T>(this Task<Result<T,{{resultErrorType}}>> result, int successStatusCode = 200)
public static async Task<Results<JsonHttpResult<T>, {{httpResultType}}>> ToJsonHttpResult<T>(this Task<Result<T,{{resultErrorType}}>> result, int successStatusCode = 200)
{
return (await result).ToHttpResult(successStatusCode);
return (await result).ToJsonHttpResult(successStatusCode);
}
""";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,21 @@ public string Generate(string mapperClassName, string resultErrorType, string ht
{
return $$"""
/// <summary>
/// Discards the value of <see cref="Result{T,E}"/> and Returns a <see cref="StatusCodeHttpResult"/> in case of success result. Returns custom mapping in case of failure. You can override the success status code.
/// Discards the value of <see cref="Result{T,E}"/> and Returns a <see cref="NoContent"/> in case of success result. Returns custom mapping in case of failure.
/// </summary>
public static Results<StatusCodeHttpResult, {{httpResultType}}> ToNoContentHttpResult<T>(this Result<T,{{resultErrorType}}> result, int successStatusCode = 204)
public static Results<NoContent, {{httpResultType}}> ToNoContentHttpResult<T>(this Result<T,{{resultErrorType}}> result)
{
if (result.IsSuccess) return TypedResults.StatusCode(successStatusCode);
if (result.IsSuccess) return TypedResults.NoContent();

return new {{mapperClassName}}().Map(result.Error);
}

/// <summary>
/// Discards the value of <see cref="Result{T,E}"/> and Returns a <see cref="StatusCodeHttpResult"/> in case of success result. Returns custom mapping in case of failure. You can override the success status code.
/// Discards the value of <see cref="Result{T,E}"/> and Returns a <see cref="NoContent"/> in case of success result. Returns custom mapping in case of failure.
/// </summary>
public static async Task<Results<StatusCodeHttpResult, {{httpResultType}}>> ToNoContentHttpResult<T>(this Task<Result<T,{{resultErrorType}}>> result, int successStatusCode = 204)
public static async Task<Results<NoContent, {{httpResultType}}>> ToNoContentHttpResult<T>(this Task<Result<T,{{resultErrorType}}>> result)
{
return (await result).ToNoContentHttpResult(successStatusCode);
return (await result).ToNoContentHttpResult();
}
""";
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
namespace CSharpFunctionalExtensions.HttpResults.Generators.ResultExtensions;

internal class ToOkHttpResultTE: IGenerateMethods
{
public string Generate(string mapperClassName, string resultErrorType, string httpResultType)
{
return $$"""
/// <summary>
/// Returns a <see cref="Ok{TValue}"/> in case of success result. Returns custom mapping in case of failure.
/// </summary>
public static Results<Ok<T>, {{httpResultType}}> ToOkHttpResult<T>(this Result<T,{{resultErrorType}}> result)
{
if (result.IsSuccess) return TypedResults.Ok(result.Value);

return new {{mapperClassName}}().Map(result.Error);
}

/// <summary>
/// Returns a <see cref="Ok{TValue}"/> in case of success result. Returns custom mapping in case of failure.
/// </summary>
public static async Task<Results<Ok<T>, {{httpResultType}}>> ToOkHttpResult<T>(this Task<Result<T,{{resultErrorType}}>> result)
{
return (await result).ToOkHttpResult();
}
""";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
namespace CSharpFunctionalExtensions.HttpResults.Generators.ResultExtensions;

internal class ToStatusCodeHttpResultTE: IGenerateMethods
{
public string Generate(string mapperClassName, string resultErrorType, string httpResultType)
{
return $$"""
/// <summary>
/// Discards the value of <see cref="Result{T,E}"/> and Returns a <see cref="StatusCodeHttpResult"/> in case of success result. Returns custom mapping in case of failure. You can override the success status code.
/// </summary>
public static Results<StatusCodeHttpResult, {{httpResultType}}> ToStatusCodeHttpResult<T>(this Result<T,{{resultErrorType}}> result, int successStatusCode = 204)
{
if (result.IsSuccess) return TypedResults.StatusCode(successStatusCode);

return new {{mapperClassName}}().Map(result.Error);
}

/// <summary>
/// Discards the value of <see cref="Result{T,E}"/> and Returns a <see cref="StatusCodeHttpResult"/> in case of success result. Returns custom mapping in case of failure. You can override the success status code.
/// </summary>
public static async Task<Results<StatusCodeHttpResult, {{httpResultType}}>> ToStatusCodeHttpResult<T>(this Task<Result<T,{{resultErrorType}}>> result, int successStatusCode = 204)
{
return (await result).ToStatusCodeHttpResult(successStatusCode);
}
""";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,27 @@

namespace CSharpFunctionalExtensions.HttpResults.Tests.ResultExtensions;

public class ToHttpResultT
public class ToJsonHttpResultT
{
[Fact]
public void ResultT_Success_can_be_mapped_to_HttpResult()
public void ResultT_Success_can_be_mapped_to_JsonHttpResult()
{
var value = "foo";

var result = Result.Success(value)
.ToHttpResult().Result as JsonHttpResult<string>;
.ToJsonHttpResult().Result as JsonHttpResult<string>;

result!.StatusCode.Should().Be(200);
result!.Value.Should().Be(value);
}

[Fact]
public async Task ResultT_Success_can_be_mapped_to_HttpResult_Async()
public async Task ResultT_Success_can_be_mapped_to_JsonHttpResult_Async()
{
var value = "foo";

var result = (await Task.FromResult(Result.Success(value))
.ToHttpResult()).Result as JsonHttpResult<string>;
.ToJsonHttpResult()).Result as JsonHttpResult<string>;

result!.StatusCode.Should().Be(200);
result!.Value.Should().Be(value);
Expand All @@ -37,7 +37,7 @@ public void ResultT_Success_StatusCode_can_be_changed()
var value = "foo";

var result = Result.Success(value)
.ToHttpResult(statusCode).Result as JsonHttpResult<string>;
.ToJsonHttpResult(statusCode).Result as JsonHttpResult<string>;

result!.StatusCode.Should().Be(statusCode);
result!.Value.Should().Be(value);
Expand All @@ -50,32 +50,32 @@ public async Task ResultT_Success_StatusCode_can_be_changed_Async()
var value = "foo";

var result = (await Task.FromResult(Result.Success(value))
.ToHttpResult(statusCode)).Result as JsonHttpResult<string>;
.ToJsonHttpResult(statusCode)).Result as JsonHttpResult<string>;

result!.StatusCode.Should().Be(statusCode);
result!.Value.Should().Be(value);
}

[Fact]
public void ResultT_Failure_can_be_mapped_to_HttpResult()
public void ResultT_Failure_can_be_mapped_to_JsonHttpResult()
{
var error = "Error";

var result = Result.Failure<string>(error)
.ToHttpResult().Result as ProblemHttpResult;
.ToJsonHttpResult().Result as ProblemHttpResult;

result!.StatusCode.Should().Be(400);
result!.ProblemDetails.Status.Should().Be(400);
result!.ProblemDetails.Detail.Should().Be(error);
}

[Fact]
public async Task ResultT_Failure_can_be_mapped_to_HttpResult_Async()
public async Task ResultT_Failure_can_be_mapped_to_JsonHttpResult_Async()
{
var error = "Error";

var result = (await Task.FromResult(Result.Failure<string>(error))
.ToHttpResult()).Result as ProblemHttpResult;
.ToJsonHttpResult()).Result as ProblemHttpResult;

result!.StatusCode.Should().Be(400);
result!.ProblemDetails.Status.Should().Be(400);
Expand All @@ -89,7 +89,7 @@ public void ResultT_Failure_StatusCode_can_be_changed()
var error = "Error";

var result = Result.Failure<string>(error)
.ToHttpResult(failureStatusCode: statusCode).Result as ProblemHttpResult;
.ToJsonHttpResult(failureStatusCode: statusCode).Result as ProblemHttpResult;

result!.StatusCode.Should().Be(statusCode);
result!.ProblemDetails.Status.Should().Be(statusCode);
Expand All @@ -103,7 +103,7 @@ public async Task ResultT_Failure_StatusCode_can_be_changed_Async()
var error = "Error";

var result = (await Task.FromResult(Result.Failure<string>(error))
.ToHttpResult(failureStatusCode: statusCode)).Result as ProblemHttpResult;
.ToJsonHttpResult(failureStatusCode: statusCode)).Result as ProblemHttpResult;

result!.StatusCode.Should().Be(statusCode);
result!.ProblemDetails.Status.Should().Be(statusCode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,33 @@

namespace CSharpFunctionalExtensions.HttpResults.Tests.ResultExtensions;

public class ToHttpResultTE
public class ToJsonHttpResultTE
{
[Fact]
public void ResultTE_Success_can_be_mapped_to_HttpResult()
public void ResultTE_Success_can_be_mapped_to_JsonHttpResult()
{
var document = new Document
{
DocumentId = Guid.NewGuid().ToString()
};

var result = Result.Success<Document, DocumentMissingError>(document)
.ToHttpResult().Result as JsonHttpResult<Document>;
.ToJsonHttpResult().Result as JsonHttpResult<Document>;

result!.StatusCode.Should().Be(200);
result!.Value!.DocumentId.Should().Be(document.DocumentId);
}

[Fact]
public async Task ResultTE_Success_can_be_mapped_to_HttpResult_Async()
public async Task ResultTE_Success_can_be_mapped_to_JsonHttpResult_Async()
{
var document = new Document
{
DocumentId = Guid.NewGuid().ToString()
};

var result = (await Task.FromResult(Result.Success<Document, DocumentMissingError>(document))
.ToHttpResult()).Result as JsonHttpResult<Document>;
.ToJsonHttpResult()).Result as JsonHttpResult<Document>;

result!.StatusCode.Should().Be(200);
result!.Value!.DocumentId.Should().Be(document.DocumentId);
Expand All @@ -46,7 +46,7 @@ public void ResultTE_Success_StatusCode_can_be_changed()
};

var result = Result.Success<Document, DocumentMissingError>(document)
.ToHttpResult(statusCode).Result as JsonHttpResult<Document>;
.ToJsonHttpResult(statusCode).Result as JsonHttpResult<Document>;

result!.StatusCode.Should().Be(statusCode);
}
Expand All @@ -61,36 +61,36 @@ public async Task ResultTE_Success_StatusCode_can_be_changed_Async()
};

var result = (await Task.FromResult(Result.Success<Document, DocumentMissingError>(document))
.ToHttpResult(statusCode)).Result as JsonHttpResult<Document>;
.ToJsonHttpResult(statusCode)).Result as JsonHttpResult<Document>;

result!.StatusCode.Should().Be(statusCode);
}

[Fact]
public void ResultTE_Failure_can_be_mapped_to_HttpResult()
public void ResultTE_Failure_can_be_mapped_to_JsonHttpResult()
{
var error = new DocumentMissingError
{
DocumentId = Guid.NewGuid().ToString()
};

var result = Result.Failure<Document, DocumentMissingError>(error)
.ToHttpResult().Result as NotFound<string>;
.ToJsonHttpResult().Result as NotFound<string>;

result!.StatusCode.Should().Be(404);
result!.Value.Should().Be(error.DocumentId);
}

[Fact]
public async Task ResultTE_Failure_can_be_mapped_to_HttpResult_Async()
public async Task ResultTE_Failure_can_be_mapped_to_JsonHttpResult_Async()
{
var error = new DocumentMissingError
{
DocumentId = Guid.NewGuid().ToString()
};

var result = (await Task.FromResult(Result.Failure<Document, DocumentMissingError>(error))
.ToHttpResult()).Result as NotFound<string>;
.ToJsonHttpResult()).Result as NotFound<string>;

result!.StatusCode.Should().Be(404);
result!.Value.Should().Be(error.DocumentId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public void ResultT_Success_can_be_mapped_to_NoContentHttpResult()
var value = "foo";

var result = Result.Success(value)
.ToNoContentHttpResult().Result as StatusCodeHttpResult;
.ToNoContentHttpResult().Result as NoContent;

result!.StatusCode.Should().Be(204);
}
Expand All @@ -23,35 +23,11 @@ public async Task ResultT_Success_can_be_mapped_to_NoContentHttpResult_Async()
var value = "foo";

var result = (await Task.FromResult(Result.Success(value))
.ToNoContentHttpResult()).Result as StatusCodeHttpResult;
.ToNoContentHttpResult()).Result as NoContent;

result!.StatusCode.Should().Be(204);
}

[Fact]
public void ResultT_Success_StatusCode_can_be_changed()
{
var statusCode = 210;
var value = "foo";

var result = Result.Success(value)
.ToNoContentHttpResult(statusCode).Result as StatusCodeHttpResult;

result!.StatusCode.Should().Be(statusCode);
}

[Fact]
public async Task ResultT_Success_StatusCode_can_be_changed_Async()
{
var statusCode = 210;
var value = "foo";

var result = (await Task.FromResult(Result.Success(value))
.ToNoContentHttpResult(statusCode)).Result as StatusCodeHttpResult;

result!.StatusCode.Should().Be(statusCode);
}

[Fact]
public void ResultT_Failure_can_be_mapped_to_HttpResult()
{
Expand Down
Loading
Loading