(feature): better message and type conversion handling

This commit is contained in:
Maksym Sadovnychyy 2024-09-28 12:05:40 +02:00
parent 2c6cd09101
commit 77e1ec671d
7 changed files with 1470 additions and 792 deletions

View File

@ -8,7 +8,7 @@
<!-- NuGet package metadata -->
<PackageId>MaksIT.Results</PackageId>
<Version>1.0.0</Version>
<Version>1.0.1</Version>
<Authors>Maksym Sadovnychyy</Authors>
<Company>MAKS-IT</Company>
<Product>MaksIT.Results</Product>

View File

@ -1,250 +1,460 @@
using System.Net;
namespace MaksIT.Results {
public partial class Result {
namespace MaksIT.Results;
/// <summary>
/// Returns a result indicating that the server could not understand the request due to invalid syntax.
/// Corresponds to HTTP status code 400 Bad Request.
/// </summary>
public static Result BadRequest(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.BadRequest);
}
public partial class Result {
/// <summary>
/// Returns a result indicating that the client must authenticate itself to get the requested response.
/// Corresponds to HTTP status code 401 Unauthorized.
/// </summary>
public static Result Unauthorized(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.Unauthorized);
}
/// <summary>
/// Returns a result indicating that the server could not understand the request due to invalid syntax.
/// Corresponds to HTTP status code 400 Bad Request.
/// </summary>
public static Result BadRequest(string message) =>
BadRequest(new List<string> { message });
/// <summary>
/// Returns a result indicating that the client does not have access rights to the content.
/// Corresponds to HTTP status code 403 Forbidden.
/// </summary>
public static Result Forbidden(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.Forbidden);
}
/// <summary>
/// Returns a result indicating that the server can not find the requested resource.
/// Corresponds to HTTP status code 404 Not Found.
/// </summary>
public static Result NotFound(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.NotFound);
}
/// <summary>
/// Returns a result indicating that the request could not be completed due to a conflict with the current state of the resource.
/// Corresponds to HTTP status code 409 Conflict.
/// </summary>
public static Result Conflict(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.Conflict);
}
/// <summary>
/// Returns a result indicating that the requested resource is no longer available and will not be available again.
/// Corresponds to HTTP status code 410 Gone.
/// </summary>
public static Result Gone(params string[] messages) {
return new Result(false, new List<string>(messages), (HttpStatusCode)410); // 410 Gone
}
/// <summary>
/// Returns a result indicating that the request failed because it depended on another request and that request failed.
/// Corresponds to HTTP status code 424 Failed Dependency.
/// </summary>
public static Result FailedDependency(params string[] messages) {
return new Result(false, new List<string>(messages), (HttpStatusCode)424); // 424 Failed Dependency
}
/// <summary>
/// Returns a result indicating that the server requires the request to be conditional.
/// Corresponds to HTTP status code 428 Precondition Required.
/// </summary>
public static Result PreconditionRequired(params string[] messages) {
return new Result(false, new List<string>(messages), (HttpStatusCode)428); // 428 Precondition Required
}
/// <summary>
/// Returns a result indicating that the user has sent too many requests in a given amount of time.
/// Corresponds to HTTP status code 429 Too Many Requests.
/// </summary>
public static Result TooManyRequests(params string[] messages) {
return new Result(false, new List<string>(messages), (HttpStatusCode)429); // 429 Too Many Requests
}
/// <summary>
/// Returns a result indicating that the server is unwilling to process the request because its header fields are too large.
/// Corresponds to HTTP status code 431 Request Header Fields Too Large.
/// </summary>
public static Result RequestHeaderFieldsTooLarge(params string[] messages) {
return new Result(false, new List<string>(messages), (HttpStatusCode)431); // 431 Request Header Fields Too Large
}
/// <summary>
/// Returns a result indicating that the server cannot process the request entity because it is too large.
/// Corresponds to HTTP status code 413 Payload Too Large.
/// </summary>
public static Result PayloadTooLarge(params string[] messages) {
return new Result(false, new List<string>(messages), (HttpStatusCode)413); // 413 Payload Too Large
}
/// <summary>
/// Returns a result indicating that the server cannot process the request because the URI is too long.
/// Corresponds to HTTP status code 414 URI Too Long.
/// </summary>
public static Result UriTooLong(params string[] messages) {
return new Result(false, new List<string>(messages), (HttpStatusCode)414); // 414 URI Too Long
}
/// <summary>
/// Returns a result indicating that the server cannot process the request because the media type is unsupported.
/// Corresponds to HTTP status code 415 Unsupported Media Type.
/// </summary>
public static Result UnsupportedMediaType(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.UnsupportedMediaType);
}
/// <summary>
/// Returns a result indicating that the server cannot process the request because it expects the request to have a defined Content-Length header.
/// Corresponds to HTTP status code 411 Length Required.
/// </summary>
public static Result LengthRequired(params string[] messages) {
return new Result(false, new List<string>(messages), (HttpStatusCode)411); // 411 Length Required
}
/// <summary>
/// Returns a result indicating that the server cannot process the request due to an illegal request entity.
/// Corresponds to HTTP status code 422 Unprocessable Entity.
/// </summary>
public static Result UnprocessableEntity(params string[] messages) {
return new Result(false, new List<string>(messages), (HttpStatusCode)422); // 422 Unprocessable Entity
}
/// <summary>
/// Returns a result indicating that the server could not understand the request due to invalid syntax.
/// Corresponds to HTTP status code 400 Bad Request.
/// </summary>
public static Result BadRequest(List<string> messages) {
return new Result(false, messages, HttpStatusCode.BadRequest);
}
public partial class Result<T> : Result {
/// <summary>
/// Returns a result indicating that the client must authenticate itself to get the requested response.
/// Corresponds to HTTP status code 401 Unauthorized.
/// </summary>
public static Result Unauthorized(string message) =>
Unauthorized(new List<string> { message });
/// <summary>
/// Returns a result indicating that the server could not understand the request due to invalid syntax.
/// Corresponds to HTTP status code 400 Bad Request.
/// </summary>
public static Result<T> BadRequest(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.BadRequest);
}
/// <summary>
/// Returns a result indicating that the client must authenticate itself to get the requested response.
/// Corresponds to HTTP status code 401 Unauthorized.
/// </summary>
public static Result Unauthorized(List<string> messages) {
return new Result(false, messages, HttpStatusCode.Unauthorized);
}
/// <summary>
/// Returns a result indicating that the client must authenticate itself to get the requested response.
/// Corresponds to HTTP status code 401 Unauthorized.
/// </summary>
public static Result<T> Unauthorized(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.Unauthorized);
}
/// <summary>
/// Returns a result indicating that the client does not have access rights to the content.
/// Corresponds to HTTP status code 403 Forbidden.
/// </summary>
public static Result Forbidden(string message) =>
Forbidden(new List<string> { message });
/// <summary>
/// Returns a result indicating that the client does not have access rights to the content.
/// Corresponds to HTTP status code 403 Forbidden.
/// </summary>
public static Result<T> Forbidden(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.Forbidden);
}
/// <summary>
/// Returns a result indicating that the client does not have access rights to the content.
/// Corresponds to HTTP status code 403 Forbidden.
/// </summary>
public static Result Forbidden(List<string> messages) {
return new Result(false, messages, HttpStatusCode.Forbidden);
}
/// <summary>
/// Returns a result indicating that the server can not find the requested resource.
/// Corresponds to HTTP status code 404 Not Found.
/// </summary>
public static Result<T> NotFound(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.NotFound);
}
/// <summary>
/// Returns a result indicating that the server can not find the requested resource.
/// Corresponds to HTTP status code 404 Not Found.
/// </summary>
public static Result NotFound(string message) =>
NotFound(new List<string> { message });
/// <summary>
/// Returns a result indicating that the request could not be completed due to a conflict with the current state of the resource.
/// Corresponds to HTTP status code 409 Conflict.
/// </summary>
public static Result<T> Conflict(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.Conflict);
}
/// <summary>
/// Returns a result indicating that the server can not find the requested resource.
/// Corresponds to HTTP status code 404 Not Found.
/// </summary>
public static Result NotFound(List<string> messagess) {
return new Result(false, messagess, HttpStatusCode.NotFound);
}
/// <summary>
/// Returns a result indicating that the requested resource is no longer available and will not be available again.
/// Corresponds to HTTP status code 410 Gone.
/// </summary>
public static Result<T> Gone(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), (HttpStatusCode)410); // 410 Gone
}
/// <summary>
/// Returns a result indicating that the request could not be completed due to a conflict with the current state of the resource.
/// Corresponds to HTTP status code 409 Conflict.
/// </summary>
public static Result Conflict(string message) =>
Conflict(new List<string> { message });
/// <summary>
/// Returns a result indicating that the request failed because it depended on another request and that request failed.
/// Corresponds to HTTP status code 424 Failed Dependency.
/// </summary>
public static Result<T> FailedDependency(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), (HttpStatusCode)424); // 424 Failed Dependency
}
/// <summary>
/// Returns a result indicating that the request could not be completed due to a conflict with the current state of the resource.
/// Corresponds to HTTP status code 409 Conflict.
/// </summary>
public static Result Conflict(List<string> messages) {
return new Result(false, messages, HttpStatusCode.Conflict);
}
/// <summary>
/// Returns a result indicating that the server requires the request to be conditional.
/// Corresponds to HTTP status code 428 Precondition Required.
/// </summary>
public static Result<T> PreconditionRequired(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), (HttpStatusCode)428); // 428 Precondition Required
}
/// <summary>
/// Returns a result indicating that the requested resource is no longer available and will not be available again.
/// Corresponds to HTTP status code 410 Gone.
/// </summary>
public static Result Gone(string message) =>
Gone(new List<string> { message });
/// <summary>
/// Returns a result indicating that the user has sent too many requests in a given amount of time.
/// Corresponds to HTTP status code 429 Too Many Requests.
/// </summary>
public static Result<T> TooManyRequests(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), (HttpStatusCode)429); // 429 Too Many Requests
}
/// <summary>
/// Returns a result indicating that the requested resource is no longer available and will not be available again.
/// Corresponds to HTTP status code 410 Gone.
/// </summary>
public static Result Gone(List<string> messages) {
return new Result(false, messages, (HttpStatusCode)410); // 410 Gone
}
/// <summary>
/// Returns a result indicating that the server is unwilling to process the request because its header fields are too large.
/// Corresponds to HTTP status code 431 Request Header Fields Too Large.
/// </summary>
public static Result<T> RequestHeaderFieldsTooLarge(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), (HttpStatusCode)431); // 431 Request Header Fields Too Large
}
/// <summary>
/// Returns a result indicating that the request failed because it depended on another request and that request failed.
/// Corresponds to HTTP status code 424 Failed Dependency.
/// </summary>
public static Result FailedDependency(string message) =>
FailedDependency(new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request entity because it is too large.
/// Corresponds to HTTP status code 413 Payload Too Large.
/// </summary>
public static Result<T> PayloadTooLarge(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), (HttpStatusCode)413); // 413 Payload Too Large
}
/// <summary>
/// Returns a result indicating that the request failed because it depended on another request and that request failed.
/// Corresponds to HTTP status code 424 Failed Dependency.
/// </summary>
public static Result FailedDependency(List<string> messages) {
return new Result(false, messages, (HttpStatusCode)424); // 424 Failed Dependency
}
/// <summary>
/// Returns a result indicating that the server cannot process the request because the URI is too long.
/// Corresponds to HTTP status code 414 URI Too Long.
/// </summary>
public static Result<T> UriTooLong(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), (HttpStatusCode)414); // 414 URI Too Long
}
/// <summary>
/// Returns a result indicating that the server requires the request to be conditional.
/// Corresponds to HTTP status code 428 Precondition Required.
/// </summary>
public static Result PreconditionRequired(string message) =>
PreconditionRequired(new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request because the media type is unsupported.
/// Corresponds to HTTP status code 415 Unsupported Media Type.
/// </summary>
public static Result<T> UnsupportedMediaType(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.UnsupportedMediaType);
}
/// <summary>
/// Returns a result indicating that the server requires the request to be conditional.
/// Corresponds to HTTP status code 428 Precondition Required.
/// </summary>
public static Result PreconditionRequired(List<string> messages) {
return new Result(false, messages, (HttpStatusCode)428); // 428 Precondition Required
}
/// <summary>
/// Returns a result indicating that the server cannot process the request because it expects the request to have a defined Content-Length header.
/// Corresponds to HTTP status code 411 Length Required.
/// </summary>
public static Result<T> LengthRequired(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), (HttpStatusCode)411); // 411 Length Required
}
/// <summary>
/// Returns a result indicating that the user has sent too many requests in a given amount of time.
/// Corresponds to HTTP status code 429 Too Many Requests.
/// </summary>
public static Result TooManyRequests(string message) =>
TooManyRequests(new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request due to an illegal request entity.
/// Corresponds to HTTP status code 422 Unprocessable Entity.
/// </summary>
public static Result<T> UnprocessableEntity(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), (HttpStatusCode)422); // 422 Unprocessable Entity
}
/// <summary>
/// Returns a result indicating that the user has sent too many requests in a given amount of time.
/// Corresponds to HTTP status code 429 Too Many Requests.
/// </summary>
public static Result TooManyRequests(List<string> messages) {
return new Result(false, messages, (HttpStatusCode)429); // 429 Too Many Requests
}
/// <summary>
/// Returns a result indicating that the server is unwilling to process the request because its header fields are too large.
/// Corresponds to HTTP status code 431 Request Header Fields Too Large.
/// </summary>
public static Result RequestHeaderFieldsTooLarge(string message) =>
RequestHeaderFieldsTooLarge(new List<string> { message });
/// <summary>
/// Returns a result indicating that the server is unwilling to process the request because its header fields are too large.
/// Corresponds to HTTP status code 431 Request Header Fields Too Large.
/// </summary>
public static Result RequestHeaderFieldsTooLarge(List<string> messages) {
return new Result(false, messages, (HttpStatusCode)431); // 431 Request Header Fields Too Large
}
/// <summary>
/// Returns a result indicating that the server cannot process the request entity because it is too large.
/// Corresponds to HTTP status code 413 Payload Too Large.
/// </summary>
public static Result PayloadTooLarge(string message) =>
PayloadTooLarge(new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request entity because it is too large.
/// Corresponds to HTTP status code 413 Payload Too Large.
/// </summary>
public static Result PayloadTooLarge(List<string> messages) {
return new Result(false, messages, (HttpStatusCode)413); // 413 Payload Too Large
}
/// <summary>
/// Returns a result indicating that the server cannot process the request because the URI is too long.
/// Corresponds to HTTP status code 414 URI Too Long.
/// </summary>
public static Result UriTooLong(string message) =>
UriTooLong(new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request because the URI is too long.
/// Corresponds to HTTP status code 414 URI Too Long.
/// </summary>
public static Result UriTooLong(List<string> messages) {
return new Result(false, messages, (HttpStatusCode)414); // 414 URI Too Long
}
/// <summary>
/// Returns a result indicating that the server cannot process the request because the media type is unsupported.
/// Corresponds to HTTP status code 415 Unsupported Media Type.
/// </summary>
public static Result UnsupportedMediaType(string message) =>
UnsupportedMediaType(new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request because the media type is unsupported.
/// Corresponds to HTTP status code 415 Unsupported Media Type.
/// </summary>
public static Result UnsupportedMediaType(List<string> messages) {
return new Result(false, messages, HttpStatusCode.UnsupportedMediaType);
}
/// <summary>
/// Returns a result indicating that the server cannot process the request because it expects the request to have a defined Content-Length header.
/// Corresponds to HTTP status code 411 Length Required.
/// </summary>
public static Result LengthRequired(string message) =>
LengthRequired(new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request because it expects the request to have a defined Content-Length header.
/// Corresponds to HTTP status code 411 Length Required.
/// </summary>
public static Result LengthRequired(List<string> messages) {
return new Result(false, messages, (HttpStatusCode)411); // 411 Length Required
}
/// <summary>
/// Returns a result indicating that the server cannot process the request due to an illegal request entity.
/// Corresponds to HTTP status code 422 Unprocessable Entity.
/// </summary>
public static Result UnprocessableEntity(string message) =>
UnprocessableEntity(new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request due to an illegal request entity.
/// Corresponds to HTTP status code 422 Unprocessable Entity.
/// </summary>
public static Result UnprocessableEntity(List<string> messages) {
return new Result(false, messages, (HttpStatusCode)422); // 422 Unprocessable Entity
}
}
public partial class Result<T> : Result {
/// <summary>
/// Returns a result indicating that the server could not understand the request due to invalid syntax.
/// Corresponds to HTTP status code 400 Bad Request.
/// </summary>
public static Result<T> BadRequest(T? value, string message) =>
BadRequest(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the server could not understand the request due to invalid syntax.
/// Corresponds to HTTP status code 400 Bad Request.
/// </summary>
public static Result<T> BadRequest(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.BadRequest);
}
/// <summary>
/// Returns a result indicating that the client must authenticate itself to get the requested response.
/// Corresponds to HTTP status code 401 Unauthorized.
/// </summary>
public static Result<T> Unauthorized(T? value, string message) =>
Unauthorized(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the client must authenticate itself to get the requested response.
/// Corresponds to HTTP status code 401 Unauthorized.
/// </summary>
public static Result<T> Unauthorized(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.Unauthorized);
}
/// <summary>
/// Returns a result indicating that the client does not have access rights to the content.
/// Corresponds to HTTP status code 403 Forbidden.
/// </summary>
public static Result<T> Forbidden(T? value, string message) =>
Forbidden(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the client does not have access rights to the content.
/// Corresponds to HTTP status code 403 Forbidden.
/// </summary>
public static Result<T> Forbidden(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.Forbidden);
}
/// <summary>
/// Returns a result indicating that the server can not find the requested resource.
/// Corresponds to HTTP status code 404 Not Found.
/// </summary>
public static Result<T> NotFound(T? value, string message) =>
NotFound(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the server can not find the requested resource.
/// Corresponds to HTTP status code 404 Not Found.
/// </summary>
public static Result<T> NotFound(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.NotFound);
}
/// <summary>
/// Returns a result indicating that the request could not be completed due to a conflict with the current state of the resource.
/// Corresponds to HTTP status code 409 Conflict.
/// </summary>
public static Result<T> Conflict(T? value, string message) =>
Conflict(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the request could not be completed due to a conflict with the current state of the resource.
/// Corresponds to HTTP status code 409 Conflict.
/// </summary>
public static Result<T> Conflict(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.Conflict);
}
/// <summary>
/// Returns a result indicating that the requested resource is no longer available and will not be available again.
/// Corresponds to HTTP status code 410 Gone.
/// </summary>
public static Result<T> Gone(T? value, string message) =>
Gone(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource is no longer available and will not be available again.
/// Corresponds to HTTP status code 410 Gone.
/// </summary>
public static Result<T> Gone(T? value, List<string> messages) {
return new Result<T>(value, false, messages, (HttpStatusCode)410); // 410 Gone
}
/// <summary>
/// Returns a result indicating that the request failed because it depended on another request and that request failed.
/// Corresponds to HTTP status code 424 Failed Dependency.
/// </summary>
public static Result<T> FailedDependency(T? value, string message) =>
FailedDependency(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the request failed because it depended on another request and that request failed.
/// Corresponds to HTTP status code 424 Failed Dependency.
/// </summary>
public static Result<T> FailedDependency(T? value, List<string> messages) {
return new Result<T>(value, false, messages, (HttpStatusCode)424); // 424 Failed Dependency
}
/// <summary>
/// Returns a result indicating that the server requires the request to be conditional.
/// Corresponds to HTTP status code 428 Precondition Required.
/// </summary>
public static Result<T> PreconditionRequired(T? value, string message) =>
PreconditionRequired(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the server requires the request to be conditional.
/// Corresponds to HTTP status code 428 Precondition Required.
/// </summary>
public static Result<T> PreconditionRequired(T? value, List<string> messages) {
return new Result<T>(value, false, messages, (HttpStatusCode)428); // 428 Precondition Required
}
/// <summary>
/// Returns a result indicating that the user has sent too many requests in a given amount of time.
/// Corresponds to HTTP status code 429 Too Many Requests.
/// </summary>
public static Result<T> TooManyRequests(T? value, string message) =>
TooManyRequests(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the user has sent too many requests in a given amount of time.
/// Corresponds to HTTP status code 429 Too Many Requests.
/// </summary>
public static Result<T> TooManyRequests(T? value, List<string> messages) {
return new Result<T>(value, false, messages, (HttpStatusCode)429); // 429 Too Many Requests
}
/// <summary>
/// Returns a result indicating that the server is unwilling to process the request because its header fields are too large.
/// Corresponds to HTTP status code 431 Request Header Fields Too Large.
/// </summary>
public static Result<T> RequestHeaderFieldsTooLarge(T? value, string message) =>
RequestHeaderFieldsTooLarge(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the server is unwilling to process the request because its header fields are too large.
/// Corresponds to HTTP status code 431 Request Header Fields Too Large.
/// </summary>
public static Result<T> RequestHeaderFieldsTooLarge(T? value, List<string> messages) {
return new Result<T>(value, false, messages, (HttpStatusCode)431); // 431 Request Header Fields Too Large
}
/// <summary>
/// Returns a result indicating that the server cannot process the request entity because it is too large.
/// Corresponds to HTTP status code 413 Payload Too Large.
/// </summary>
public static Result<T> PayloadTooLarge(T? value, string message) =>
PayloadTooLarge(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request entity because it is too large.
/// Corresponds to HTTP status code 413 Payload Too Large.
/// </summary>
public static Result<T> PayloadTooLarge(T? value, List<string> messages) {
return new Result<T>(value, false, messages, (HttpStatusCode)413); // 413 Payload Too Large
}
/// <summary>
/// Returns a result indicating that the server cannot process the request because the URI is too long.
/// Corresponds to HTTP status code 414 URI Too Long.
/// </summary>
public static Result<T> UriTooLong(T? value, string message) =>
UriTooLong(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request because the URI is too long.
/// Corresponds to HTTP status code 414 URI Too Long.
/// </summary>
public static Result<T> UriTooLong(T? value, List<string> messages) {
return new Result<T>(value, false, messages, (HttpStatusCode)414); // 414 URI Too Long
}
/// <summary>
/// Returns a result indicating that the server cannot process the request because the media type is unsupported.
/// Corresponds to HTTP status code 415 Unsupported Media Type.
/// </summary>
public static Result<T> UnsupportedMediaType(T? value, string message) =>
UnsupportedMediaType(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request because the media type is unsupported.
/// Corresponds to HTTP status code 415 Unsupported Media Type.
/// </summary>
public static Result<T> UnsupportedMediaType(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.UnsupportedMediaType);
}
/// <summary>
/// Returns a result indicating that the server cannot process the request because it expects the request to have a defined Content-Length header.
/// Corresponds to HTTP status code 411 Length Required.
/// </summary>
public static Result<T> LengthRequired(T? value, string message) =>
LengthRequired(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request because it expects the request to have a defined Content-Length header.
/// Corresponds to HTTP status code 411 Length Required.
/// </summary>
public static Result<T> LengthRequired(T? value, List<string> messages) {
return new Result<T>(value, false, messages, (HttpStatusCode)411); // 411 Length Required
}
/// <summary>
/// Returns a result indicating that the server cannot process the request due to an illegal request entity.
/// Corresponds to HTTP status code 422 Unprocessable Entity.
/// </summary>
public static Result<T> UnprocessableEntity(T? value, string message) =>
UnprocessableEntity(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the server cannot process the request due to an illegal request entity.
/// Corresponds to HTTP status code 422 Unprocessable Entity.
/// </summary>
public static Result<T> UnprocessableEntity(T? value, List<string> messages) {
return new Result<T>(value, false, messages, (HttpStatusCode)422); // 422 Unprocessable Entity
}
}

View File

@ -1,75 +1,131 @@
using System.Net;
namespace MaksIT.Results {
public partial class Result {
namespace MaksIT.Results;
/// <summary>
/// Returns a result indicating that the initial part of a request has been received and the client should continue with the request.
/// Corresponds to HTTP status code 100 Continue.
/// </summary>
public static Result Continue(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.Continue);
}
public partial class Result {
/// <summary>
/// Returns a result indicating that the server is switching to a different protocol as requested by the client.
/// Corresponds to HTTP status code 101 Switching Protocols.
/// </summary>
public static Result SwitchingProtocols(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.SwitchingProtocols);
}
/// <summary>
/// Returns a result indicating that the server has received and is processing the request, but no response is available yet.
/// Corresponds to HTTP status code 102 Processing.
/// </summary>
public static Result Processing(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.Processing);
}
/// <summary>
/// Returns a result indicating that the server is sending information about early hints that may be used by the client to begin preloading resources while the server prepares a final response.
/// Corresponds to HTTP status code 103 Early Hints.
/// </summary>
public static Result EarlyHints(params string[] messages) {
return new Result(true, new List<string>(messages), (HttpStatusCode)103); // Early Hints is not defined in HttpStatusCode enum, 103 is the official code
}
/// <summary>
/// Returns a result indicating that the initial part of a request has been received and the client should continue with the request.
/// Corresponds to HTTP status code 100 Continue.
/// </summary>
public static Result Continue(string message) =>
Continue(new List<string> { message });
/// <summary>
/// Returns a result indicating that the initial part of a request has been received and the client should continue with the request.
/// Corresponds to HTTP status code 100 Continue.
/// </summary>
public static Result Continue(List<string> messages) {
return new Result(true, messages, HttpStatusCode.Continue);
}
public partial class Result<T> : Result {
/// <summary>
/// Returns a result indicating that the server is switching to a different protocol as requested by the client.
/// Corresponds to HTTP status code 101 Switching Protocols.
/// </summary>
public static Result SwitchingProtocols(string message) =>
SwitchingProtocols(new List<string> { message });
/// <summary>
/// Returns a result indicating that the initial part of a request has been received and the client should continue with the request.
/// Corresponds to HTTP status code 100 Continue.
/// </summary>
public static Result<T> Continue(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.Continue);
}
/// <summary>
/// Returns a result indicating that the server is switching to a different protocol as requested by the client.
/// Corresponds to HTTP status code 101 Switching Protocols.
/// </summary>
public static Result SwitchingProtocols(List<string> messages) {
return new Result(true, messages, HttpStatusCode.SwitchingProtocols);
}
/// <summary>
/// Returns a result indicating that the server is switching to a different protocol as requested by the client.
/// Corresponds to HTTP status code 101 Switching Protocols.
/// </summary>
public static Result<T> SwitchingProtocols(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.SwitchingProtocols);
}
/// <summary>
/// Returns a result indicating that the server has received and is processing the request, but no response is available yet.
/// Corresponds to HTTP status code 102 Processing.
/// </summary>
public static Result Processing(string message) =>
Processing(new List<string> { message });
/// <summary>
/// Returns a result indicating that the server has received and is processing the request, but no response is available yet.
/// Corresponds to HTTP status code 102 Processing.
/// </summary>
public static Result<T> Processing(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.Processing);
}
/// <summary>
/// Returns a result indicating that the server has received and is processing the request, but no response is available yet.
/// Corresponds to HTTP status code 102 Processing.
/// </summary>
public static Result Processing(List<string> messages) {
return new Result(true, messages, HttpStatusCode.Processing);
}
/// <summary>
/// Returns a result indicating that the server is sending information about early hints that may be used by the client to begin preloading resources while the server prepares a final response.
/// Corresponds to HTTP status code 103 Early Hints.
/// </summary>
public static Result<T> EarlyHints(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), (HttpStatusCode)103); // Early Hints is not defined in HttpStatusCode enum, 103 is the official code
}
/// <summary>
/// Returns a result indicating that the server is sending information about early hints that may be used by the client to begin preloading resources while the server prepares a final response.
/// Corresponds to HTTP status code 103 Early Hints.
/// </summary>
public static Result EarlyHints(string message) =>
EarlyHints(new List<string> { message });
/// <summary>
/// Returns a result indicating that the server is sending information about early hints that may be used by the client to begin preloading resources while the server prepares a final response.
/// Corresponds to HTTP status code 103 Early Hints.
/// </summary>
public static Result EarlyHints(List<string> messages) {
return new Result(true, messages, (HttpStatusCode)103); // Early Hints is not defined in HttpStatusCode enum, 103 is the official code
}
}
public partial class Result<T> : Result {
/// <summary>
/// Returns a result indicating that the initial part of a request has been received and the client should continue with the request.
/// Corresponds to HTTP status code 100 Continue.
/// </summary>
public static Result<T> Continue(T? value, string message) =>
Continue(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the initial part of a request has been received and the client should continue with the request.
/// Corresponds to HTTP status code 100 Continue.
/// </summary>
public static Result<T> Continue(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.Continue);
}
/// <summary>
/// Returns a result indicating that the server is switching to a different protocol as requested by the client.
/// Corresponds to HTTP status code 101 Switching Protocols.
/// </summary>
public static Result<T> SwitchingProtocols(T? value, string message) =>
SwitchingProtocols(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the server is switching to a different protocol as requested by the client.
/// Corresponds to HTTP status code 101 Switching Protocols.
/// </summary>
public static Result<T> SwitchingProtocols(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.SwitchingProtocols);
}
/// <summary>
/// Returns a result indicating that the server has received and is processing the request, but no response is available yet.
/// Corresponds to HTTP status code 102 Processing.
/// </summary>
public static Result<T> Processing(T? value, string message) =>
Processing(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the server has received and is processing the request, but no response is available yet.
/// Corresponds to HTTP status code 102 Processing.
/// </summary>
public static Result<T> Processing(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.Processing);
}
/// <summary>
/// Returns a result indicating that the server is sending information about early hints that may be used by the client to begin preloading resources while the server prepares a final response.
/// Corresponds to HTTP status code 103 Early Hints.
/// </summary>
public static Result<T> EarlyHints(T? value, string message) =>
EarlyHints(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the server is sending information about early hints that may be used by the client to begin preloading resources while the server prepares a final response.
/// Corresponds to HTTP status code 103 Early Hints.
/// </summary>
public static Result<T> EarlyHints(T? value, List<string> messages) {
return new Result<T>(value, true, messages, (HttpStatusCode)103); // Early Hints is not defined in HttpStatusCode enum, 103 is the official code
}
}

View File

@ -1,138 +1,250 @@
using System.Net;
namespace MaksIT.Results {
public partial class Result {
namespace MaksIT.Results;
/// <summary>
/// Returns a result indicating that the request has multiple options, and the user or user-agent should select one of them.
/// Corresponds to HTTP status code 300 Multiple Choices.
/// </summary>
public static Result MultipleChoices(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.MultipleChoices);
}
public partial class Result {
/// <summary>
/// Returns a result indicating that the requested resource has been permanently moved to a new URI.
/// Corresponds to HTTP status code 301 Moved Permanently.
/// </summary>
public static Result MovedPermanently(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.MovedPermanently);
}
/// <summary>
/// Returns a result indicating that the request has multiple options, and the user or user-agent should select one of them.
/// Corresponds to HTTP status code 300 Multiple Choices.
/// </summary>
public static Result MultipleChoices(string message) =>
MultipleChoices(new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource resides temporarily under a different URI.
/// Corresponds to HTTP status code 302 Found.
/// </summary>
public static Result Found(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.Found);
}
/// <summary>
/// Returns a result indicating that the response to the request can be found under another URI using the GET method.
/// Corresponds to HTTP status code 303 See Other.
/// </summary>
public static Result SeeOther(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.SeeOther);
}
/// <summary>
/// Returns a result indicating that the requested resource has not been modified since the last request.
/// Corresponds to HTTP status code 304 Not Modified.
/// </summary>
public static Result NotModified(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.NotModified);
}
/// <summary>
/// Returns a result indicating that the requested resource must be accessed through the proxy given by the location field.
/// Corresponds to HTTP status code 305 Use Proxy.
/// </summary>
public static Result UseProxy(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.UseProxy);
}
/// <summary>
/// Returns a result indicating that the requested resource resides temporarily under a different URI, but future requests should still use the original URI.
/// Corresponds to HTTP status code 307 Temporary Redirect.
/// </summary>
public static Result TemporaryRedirect(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.TemporaryRedirect);
}
/// <summary>
/// Returns a result indicating that the requested resource has been permanently moved to a new URI, and future references should use the new URI.
/// Corresponds to HTTP status code 308 Permanent Redirect.
/// </summary>
public static Result PermanentRedirect(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.PermanentRedirect);
}
/// <summary>
/// Returns a result indicating that the request has multiple options, and the user or user-agent should select one of them.
/// Corresponds to HTTP status code 300 Multiple Choices.
/// </summary>
public static Result MultipleChoices(List<string> messages) {
return new Result(true, messages, HttpStatusCode.MultipleChoices);
}
public partial class Result<T> : Result {
/// <summary>
/// Returns a result indicating that the requested resource has been permanently moved to a new URI.
/// Corresponds to HTTP status code 301 Moved Permanently.
/// </summary>
public static Result MovedPermanently(string message) =>
MovedPermanently(new List<string> { message });
/// <summary>
/// Returns a result indicating that the request has multiple options, and the user or user-agent should select one of them.
/// Corresponds to HTTP status code 300 Multiple Choices.
/// </summary>
public static Result<T> MultipleChoices(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.MultipleChoices);
}
/// <summary>
/// Returns a result indicating that the requested resource has been permanently moved to a new URI.
/// Corresponds to HTTP status code 301 Moved Permanently.
/// </summary>
public static Result MovedPermanently(List<string> messages) {
return new Result(true, messages, HttpStatusCode.MovedPermanently);
}
/// <summary>
/// Returns a result indicating that the requested resource has been permanently moved to a new URI.
/// Corresponds to HTTP status code 301 Moved Permanently.
/// </summary>
public static Result<T> MovedPermanently(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.MovedPermanently);
}
/// <summary>
/// Returns a result indicating that the requested resource resides temporarily under a different URI.
/// Corresponds to HTTP status code 302 Found.
/// </summary>
public static Result Found(string message) =>
Found(new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource resides temporarily under a different URI.
/// Corresponds to HTTP status code 302 Found.
/// </summary>
public static Result<T> Found(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.Found);
}
/// <summary>
/// Returns a result indicating that the requested resource resides temporarily under a different URI.
/// Corresponds to HTTP status code 302 Found.
/// </summary>
public static Result Found(List<string> messages) {
return new Result(true, messages, HttpStatusCode.Found);
}
/// <summary>
/// Returns a result indicating that the response to the request can be found under another URI using the GET method.
/// Corresponds to HTTP status code 303 See Other.
/// </summary>
public static Result<T> SeeOther(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.SeeOther);
}
/// <summary>
/// Returns a result indicating that the response to the request can be found under another URI using the GET method.
/// Corresponds to HTTP status code 303 See Other.
/// </summary>
public static Result SeeOther(string message) =>
SeeOther(new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource has not been modified since the last request.
/// Corresponds to HTTP status code 304 Not Modified.
/// </summary>
public static Result<T> NotModified(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.NotModified);
}
/// <summary>
/// Returns a result indicating that the response to the request can be found under another URI using the GET method.
/// Corresponds to HTTP status code 303 See Other.
/// </summary>
public static Result SeeOther(List<string> messages) {
return new Result(true, messages, HttpStatusCode.SeeOther);
}
/// <summary>
/// Returns a result indicating that the requested resource must be accessed through the proxy given by the location field.
/// Corresponds to HTTP status code 305 Use Proxy.
/// </summary>
public static Result<T> UseProxy(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.UseProxy);
}
/// <summary>
/// Returns a result indicating that the requested resource has not been modified since the last request.
/// Corresponds to HTTP status code 304 Not Modified.
/// </summary>
public static Result NotModified(string message) =>
NotModified(new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource resides temporarily under a different URI, but future requests should still use the original URI.
/// Corresponds to HTTP status code 307 Temporary Redirect.
/// </summary>
public static Result<T> TemporaryRedirect(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.TemporaryRedirect);
}
/// <summary>
/// Returns a result indicating that the requested resource has not been modified since the last request.
/// Corresponds to HTTP status code 304 Not Modified.
/// </summary>
public static Result NotModified(List<string> messages) {
return new Result(true, messages, HttpStatusCode.NotModified);
}
/// <summary>
/// Returns a result indicating that the requested resource has been permanently moved to a new URI, and future references should use the new URI.
/// Corresponds to HTTP status code 308 Permanent Redirect.
/// </summary>
public static Result<T> PermanentRedirect(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.PermanentRedirect);
}
/// <summary>
/// Returns a result indicating that the requested resource must be accessed through the proxy given by the location field.
/// Corresponds to HTTP status code 305 Use Proxy.
/// </summary>
public static Result UseProxy(string message) =>
UseProxy(new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource must be accessed through the proxy given by the location field.
/// Corresponds to HTTP status code 305 Use Proxy.
/// </summary>
public static Result UseProxy(List<string> messages) {
return new Result(true, messages, HttpStatusCode.UseProxy);
}
/// <summary>
/// Returns a result indicating that the requested resource resides temporarily under a different URI, but future requests should still use the original URI.
/// Corresponds to HTTP status code 307 Temporary Redirect.
/// </summary>
public static Result TemporaryRedirect(string message) =>
TemporaryRedirect(new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource resides temporarily under a different URI, but future requests should still use the original URI.
/// Corresponds to HTTP status code 307 Temporary Redirect.
/// </summary>
public static Result TemporaryRedirect(List<string> messages) {
return new Result(true, messages, HttpStatusCode.TemporaryRedirect);
}
/// <summary>
/// Returns a result indicating that the requested resource has been permanently moved to a new URI, and future references should use the new URI.
/// Corresponds to HTTP status code 308 Permanent Redirect.
/// </summary>
public static Result PermanentRedirect(string message) =>
PermanentRedirect(new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource has been permanently moved to a new URI, and future references should use the new URI.
/// Corresponds to HTTP status code 308 Permanent Redirect.
/// </summary>
public static Result PermanentRedirect(List<string> messages) {
return new Result(true, messages, HttpStatusCode.PermanentRedirect);
}
}
public partial class Result<T> : Result {
/// <summary>
/// Returns a result indicating that the request has multiple options, and the user or user-agent should select one of them.
/// Corresponds to HTTP status code 300 Multiple Choices.
/// </summary>
public static Result<T> MultipleChoices(T? value, string message) =>
MultipleChoices(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the request has multiple options, and the user or user-agent should select one of them.
/// Corresponds to HTTP status code 300 Multiple Choices.
/// </summary>
public static Result<T> MultipleChoices(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.MultipleChoices);
}
/// <summary>
/// Returns a result indicating that the requested resource has been permanently moved to a new URI.
/// Corresponds to HTTP status code 301 Moved Permanently.
/// </summary>
public static Result<T> MovedPermanently(T? value, string message) =>
MovedPermanently(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource has been permanently moved to a new URI.
/// Corresponds to HTTP status code 301 Moved Permanently.
/// </summary>
public static Result<T> MovedPermanently(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.MovedPermanently);
}
/// <summary>
/// Returns a result indicating that the requested resource resides temporarily under a different URI.
/// Corresponds to HTTP status code 302 Found.
/// </summary>
public static Result<T> Found(T? value, string message) =>
Found(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource resides temporarily under a different URI.
/// Corresponds to HTTP status code 302 Found.
/// </summary>
public static Result<T> Found(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.Found);
}
/// <summary>
/// Returns a result indicating that the response to the request can be found under another URI using the GET method.
/// Corresponds to HTTP status code 303 See Other.
/// </summary>
public static Result<T> SeeOther(T? value, string message) =>
SeeOther(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the response to the request can be found under another URI using the GET method.
/// Corresponds to HTTP status code 303 See Other.
/// </summary>
public static Result<T> SeeOther(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.SeeOther);
}
/// <summary>
/// Returns a result indicating that the requested resource has not been modified since the last request.
/// Corresponds to HTTP status code 304 Not Modified.
/// </summary>
public static Result<T> NotModified(T? value, string message) =>
NotModified(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource has not been modified since the last request.
/// Corresponds to HTTP status code 304 Not Modified.
/// </summary>
public static Result<T> NotModified(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.NotModified);
}
/// <summary>
/// Returns a result indicating that the requested resource must be accessed through the proxy given by the location field.
/// Corresponds to HTTP status code 305 Use Proxy.
/// </summary>
public static Result<T> UseProxy(T? value, string message) =>
UseProxy(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource must be accessed through the proxy given by the location field.
/// Corresponds to HTTP status code 305 Use Proxy.
/// </summary>
public static Result<T> UseProxy(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.UseProxy);
}
/// <summary>
/// Returns a result indicating that the requested resource resides temporarily under a different URI, but future requests should still use the original URI.
/// Corresponds to HTTP status code 307 Temporary Redirect.
/// </summary>
public static Result<T> TemporaryRedirect(T? value, string message) =>
TemporaryRedirect(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource resides temporarily under a different URI, but future requests should still use the original URI.
/// Corresponds to HTTP status code 307 Temporary Redirect.
/// </summary>
public static Result<T> TemporaryRedirect(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.TemporaryRedirect);
}
/// <summary>
/// Returns a result indicating that the requested resource has been permanently moved to a new URI, and future references should use the new URI.
/// Corresponds to HTTP status code 308 Permanent Redirect.
/// </summary>
public static Result<T> PermanentRedirect(T? value, string message) =>
PermanentRedirect(value, new List<string> { message });
/// <summary>
/// Returns a result indicating that the requested resource has been permanently moved to a new URI, and future references should use the new URI.
/// Corresponds to HTTP status code 308 Permanent Redirect.
/// </summary>
public static Result<T> PermanentRedirect(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.PermanentRedirect);
}
}

View File

@ -1,186 +1,339 @@
using System.Net;
namespace MaksIT.Results {
namespace MaksIT.Results;
public partial class Result {
public partial class Result {
/// <summary>
/// Returns a result indicating the server encountered an unexpected condition that prevented it from fulfilling the request.
/// Corresponds to HTTP status code 500 Internal Server Error.
/// </summary>
public static Result InternalServerError(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.InternalServerError);
}
/// <summary>
/// Returns a result indicating the server encountered an unexpected condition that prevented it from fulfilling the request.
/// Corresponds to HTTP status code 500 Internal Server Error.
/// </summary>
public static Result InternalServerError(string message) =>
InternalServerError(new List<string> { message });
/// <summary>
/// Returns a result indicating the server does not support the functionality required to fulfill the request.
/// Corresponds to HTTP status code 501 Not Implemented.
/// </summary>
public static Result NotImplemented(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.NotImplemented);
}
/// <summary>
/// Returns a result indicating the server, while acting as a gateway or proxy, received an invalid response from the upstream server.
/// Corresponds to HTTP status code 502 Bad Gateway.
/// </summary>
public static Result BadGateway(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.BadGateway);
}
/// <summary>
/// Returns a result indicating the server is currently unable to handle the request due to temporary overload or maintenance of the server.
/// Corresponds to HTTP status code 503 Service Unavailable.
/// </summary>
public static Result ServiceUnavailable(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.ServiceUnavailable);
}
/// <summary>
/// Returns a result indicating the server, while acting as a gateway or proxy, did not receive a timely response from the upstream server.
/// Corresponds to HTTP status code 504 Gateway Timeout.
/// </summary>
public static Result GatewayTimeout(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.GatewayTimeout);
}
/// <summary>
/// Returns a result indicating the server does not support the HTTP protocol version used in the request.
/// Corresponds to HTTP status code 505 HTTP Version Not Supported.
/// </summary>
public static Result HttpVersionNotSupported(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.HttpVersionNotSupported);
}
/// <summary>
/// Returns a result indicating the server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.
/// Corresponds to HTTP status code 506 Variant Also Negotiates.
/// </summary>
public static Result VariantAlsoNegotiates(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.VariantAlsoNegotiates);
}
/// <summary>
/// Returns a result indicating the server is unable to store the representation needed to complete the request.
/// Corresponds to HTTP status code 507 Insufficient Storage.
/// </summary>
public static Result InsufficientStorage(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.InsufficientStorage);
}
/// <summary>
/// Returns a result indicating the server detected an infinite loop while processing a request with depth: infinity. Usually encountered in WebDAV scenarios.
/// Corresponds to HTTP status code 508 Loop Detected.
/// </summary>
public static Result LoopDetected(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.LoopDetected);
}
/// <summary>
/// Returns a result indicating further extensions to the request are required for the server to fulfill it.
/// Corresponds to HTTP status code 510 Not Extended.
/// </summary>
public static Result NotExtended(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.NotExtended);
}
/// <summary>
/// Returns a result indicating the client needs to authenticate to gain network access.
/// Corresponds to HTTP status code 511 Network Authentication Required.
/// </summary>
public static Result NetworkAuthenticationRequired(params string[] messages) {
return new Result(false, new List<string>(messages), HttpStatusCode.NetworkAuthenticationRequired);
}
/// <summary>
/// Returns a result indicating the server encountered an unexpected condition that prevented it from fulfilling the request.
/// Corresponds to HTTP status code 500 Internal Server Error.
/// </summary>
public static Result InternalServerError(List<string> messages) {
return new Result(false, messages, HttpStatusCode.InternalServerError);
}
public partial class Result<T> : Result {
/// <summary>
/// Returns a result indicating the server does not support the functionality required to fulfill the request.
/// Corresponds to HTTP status code 501 Not Implemented.
/// </summary>
public static Result NotImplemented(string message) =>
NotImplemented(new List<string> { message });
/// <summary>
/// Returns a result indicating the server encountered an unexpected condition that prevented it from fulfilling the request.
/// Corresponds to HTTP status code 500 Internal Server Error.
/// </summary>
public static Result<T> InternalServerError(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.InternalServerError);
}
/// <summary>
/// Returns a result indicating the server does not support the functionality required to fulfill the request.
/// Corresponds to HTTP status code 501 Not Implemented.
/// </summary>
public static Result NotImplemented(List<string> messages) {
return new Result(false, messages, HttpStatusCode.NotImplemented);
}
/// <summary>
/// Returns a result indicating the server does not support the functionality required to fulfill the request.
/// Corresponds to HTTP status code 501 Not Implemented.
/// </summary>
public static Result<T> NotImplemented(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.NotImplemented);
}
/// <summary>
/// Returns a result indicating the server, while acting as a gateway or proxy, received an invalid response from the upstream server.
/// Corresponds to HTTP status code 502 Bad Gateway.
/// </summary>
public static Result BadGateway(string message) =>
BadGateway(new List<string> { message });
/// <summary>
/// Returns a result indicating the server, while acting as a gateway or proxy, received an invalid response from the upstream server.
/// Corresponds to HTTP status code 502 Bad Gateway.
/// </summary>
public static Result<T> BadGateway(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.BadGateway);
}
/// <summary>
/// Returns a result indicating the server, while acting as a gateway or proxy, received an invalid response from the upstream server.
/// Corresponds to HTTP status code 502 Bad Gateway.
/// </summary>
public static Result BadGateway(List<string> messages) {
return new Result(false, messages, HttpStatusCode.BadGateway);
}
/// <summary>
/// Returns a result indicating the server is currently unable to handle the request due to temporary overload or maintenance of the server.
/// Corresponds to HTTP status code 503 Service Unavailable.
/// </summary>
public static Result<T> ServiceUnavailable(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.ServiceUnavailable);
}
/// <summary>
/// Returns a result indicating the server is currently unable to handle the request due to temporary overload or maintenance of the server.
/// Corresponds to HTTP status code 503 Service Unavailable.
/// </summary>
public static Result ServiceUnavailable(string message) =>
ServiceUnavailable(new List<string> { message });
/// <summary>
/// Returns a result indicating the server, while acting as a gateway or proxy, did not receive a timely response from the upstream server.
/// Corresponds to HTTP status code 504 Gateway Timeout.
/// </summary>
public static Result<T> GatewayTimeout(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.GatewayTimeout);
}
/// <summary>
/// Returns a result indicating the server is currently unable to handle the request due to temporary overload or maintenance of the server.
/// Corresponds to HTTP status code 503 Service Unavailable.
/// </summary>
public static Result ServiceUnavailable(List<string> messages) {
return new Result(false, messages, HttpStatusCode.ServiceUnavailable);
}
/// <summary>
/// Returns a result indicating the server does not support the HTTP protocol version used in the request.
/// Corresponds to HTTP status code 505 HTTP Version Not Supported.
/// </summary>
public static Result<T> HttpVersionNotSupported(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.HttpVersionNotSupported);
}
/// <summary>
/// Returns a result indicating the server, while acting as a gateway or proxy, did not receive a timely response from the upstream server.
/// Corresponds to HTTP status code 504 Gateway Timeout.
/// </summary>
public static Result GatewayTimeout(string message) =>
GatewayTimeout(new List<string> { message });
/// <summary>
/// Returns a result indicating the server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.
/// Corresponds to HTTP status code 506 Variant Also Negotiates.
/// </summary>
public static Result<T> VariantAlsoNegotiates(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.VariantAlsoNegotiates);
}
/// <summary>
/// Returns a result indicating the server, while acting as a gateway or proxy, did not receive a timely response from the upstream server.
/// Corresponds to HTTP status code 504 Gateway Timeout.
/// </summary>
public static Result GatewayTimeout(List<string> messages) {
return new Result(false, messages, HttpStatusCode.GatewayTimeout);
}
/// <summary>
/// Returns a result indicating the server is unable to store the representation needed to complete the request.
/// Corresponds to HTTP status code 507 Insufficient Storage.
/// </summary>
public static Result<T> InsufficientStorage(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.InsufficientStorage);
}
/// <summary>
/// Returns a result indicating the server does not support the HTTP protocol version used in the request.
/// Corresponds to HTTP status code 505 HTTP Version Not Supported.
/// </summary>
public static Result HttpVersionNotSupported(string message) =>
HttpVersionNotSupported(new List<string> { message });
/// <summary>
/// Returns a result indicating the server detected an infinite loop while processing a request with depth: infinity. Usually encountered in WebDAV scenarios.
/// Corresponds to HTTP status code 508 Loop Detected.
/// </summary>
public static Result<T> LoopDetected(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.LoopDetected);
}
/// <summary>
/// Returns a result indicating the server does not support the HTTP protocol version used in the request.
/// Corresponds to HTTP status code 505 HTTP Version Not Supported.
/// </summary>
public static Result HttpVersionNotSupported(List<string> messages) {
return new Result(false, messages, HttpStatusCode.HttpVersionNotSupported);
}
/// <summary>
/// Returns a result indicating further extensions to the request are required for the server to fulfill it.
/// Corresponds to HTTP status code 510 Not Extended.
/// </summary>
public static Result<T> NotExtended(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.NotExtended);
}
/// <summary>
/// Returns a result indicating the server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.
/// Corresponds to HTTP status code 506 Variant Also Negotiates.
/// </summary>
public static Result VariantAlsoNegotiates(string message) =>
VariantAlsoNegotiates(new List<string> { message });
/// <summary>
/// Returns a result indicating the client needs to authenticate to gain network access.
/// Corresponds to HTTP status code 511 Network Authentication Required.
/// </summary>
public static Result<T> NetworkAuthenticationRequired(T? value, params string[] messages) {
return new Result<T>(value, false, new List<string>(messages), HttpStatusCode.NetworkAuthenticationRequired);
}
/// <summary>
/// Returns a result indicating the server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.
/// Corresponds to HTTP status code 506 Variant Also Negotiates.
/// </summary>
public static Result VariantAlsoNegotiates(List<string> messages) {
return new Result(false, messages, HttpStatusCode.VariantAlsoNegotiates);
}
/// <summary>
/// Returns a result indicating the server is unable to store the representation needed to complete the request.
/// Corresponds to HTTP status code 507 Insufficient Storage.
/// </summary>
public static Result InsufficientStorage(string message) =>
InsufficientStorage(new List<string> { message });
/// <summary>
/// Returns a result indicating the server is unable to store the representation needed to complete the request.
/// Corresponds to HTTP status code 507 Insufficient Storage.
/// </summary>
public static Result InsufficientStorage(List<string> messages) {
return new Result(false, messages, HttpStatusCode.InsufficientStorage);
}
/// <summary>
/// Returns a result indicating the server detected an infinite loop while processing a request with depth: infinity. Usually encountered in WebDAV scenarios.
/// Corresponds to HTTP status code 508 Loop Detected.
/// </summary>
public static Result LoopDetected(string message) =>
LoopDetected(new List<string> { message });
/// <summary>
/// Returns a result indicating the server detected an infinite loop while processing a request with depth: infinity. Usually encountered in WebDAV scenarios.
/// Corresponds to HTTP status code 508 Loop Detected.
/// </summary>
public static Result LoopDetected(List<string> messages) {
return new Result(false, messages, HttpStatusCode.LoopDetected);
}
/// <summary>
/// Returns a result indicating further extensions to the request are required for the server to fulfill it.
/// Corresponds to HTTP status code 510 Not Extended.
/// </summary>
public static Result NotExtended(string message) =>
NotExtended(new List<string> { message });
/// <summary>
/// Returns a result indicating further extensions to the request are required for the server to fulfill it.
/// Corresponds to HTTP status code 510 Not Extended.
/// </summary>
public static Result NotExtended(List<string> messages) {
return new Result(false, messages, HttpStatusCode.NotExtended);
}
/// <summary>
/// Returns a result indicating the client needs to authenticate to gain network access.
/// Corresponds to HTTP status code 511 Network Authentication Required.
/// </summary>
public static Result NetworkAuthenticationRequired(string message) =>
NetworkAuthenticationRequired(new List<string> { message });
/// <summary>
/// Returns a result indicating the client needs to authenticate to gain network access.
/// Corresponds to HTTP status code 511 Network Authentication Required.
/// </summary>
public static Result NetworkAuthenticationRequired(List<string> messages) {
return new Result(false, messages, HttpStatusCode.NetworkAuthenticationRequired);
}
}
public partial class Result<T> : Result {
/// <summary>
/// Returns a result indicating the server encountered an unexpected condition that prevented it from fulfilling the request.
/// Corresponds to HTTP status code 500 Internal Server Error.
/// </summary>
public static Result<T> InternalServerError(T? value, string message) =>
InternalServerError(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the server encountered an unexpected condition that prevented it from fulfilling the request.
/// Corresponds to HTTP status code 500 Internal Server Error.
/// </summary>
public static Result<T> InternalServerError(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.InternalServerError);
}
/// <summary>
/// Returns a result indicating the server does not support the functionality required to fulfill the request.
/// Corresponds to HTTP status code 501 Not Implemented.
/// </summary>
public static Result<T> NotImplemented(T? value, string message) =>
NotImplemented(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the server does not support the functionality required to fulfill the request.
/// Corresponds to HTTP status code 501 Not Implemented.
/// </summary>
public static Result<T> NotImplemented(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.NotImplemented);
}
/// <summary>
/// Returns a result indicating the server, while acting as a gateway or proxy, received an invalid response from the upstream server.
/// Corresponds to HTTP status code 502 Bad Gateway.
/// </summary>
public static Result<T> BadGateway(T? value, string message) =>
BadGateway(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the server, while acting as a gateway or proxy, received an invalid response from the upstream server.
/// Corresponds to HTTP status code 502 Bad Gateway.
/// </summary>
public static Result<T> BadGateway(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.BadGateway);
}
/// <summary>
/// Returns a result indicating the server is currently unable to handle the request due to temporary overload or maintenance of the server.
/// Corresponds to HTTP status code 503 Service Unavailable.
/// </summary>
public static Result<T> ServiceUnavailable(T? value, string message) =>
ServiceUnavailable(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the server is currently unable to handle the request due to temporary overload or maintenance of the server.
/// Corresponds to HTTP status code 503 Service Unavailable.
/// </summary>
public static Result<T> ServiceUnavailable(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.ServiceUnavailable);
}
/// <summary>
/// Returns a result indicating the server, while acting as a gateway or proxy, did not receive a timely response from the upstream server.
/// Corresponds to HTTP status code 504 Gateway Timeout.
/// </summary>
public static Result<T> GatewayTimeout(T? value, string message) =>
GatewayTimeout(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the server, while acting as a gateway or proxy, did not receive a timely response from the upstream server.
/// Corresponds to HTTP status code 504 Gateway Timeout.
/// </summary>
public static Result<T> GatewayTimeout(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.GatewayTimeout);
}
/// <summary>
/// Returns a result indicating the server does not support the HTTP protocol version used in the request.
/// Corresponds to HTTP status code 505 HTTP Version Not Supported.
/// </summary>
public static Result<T> HttpVersionNotSupported(T? value, string message) =>
HttpVersionNotSupported(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the server does not support the HTTP protocol version used in the request.
/// Corresponds to HTTP status code 505 HTTP Version Not Supported.
/// </summary>
public static Result<T> HttpVersionNotSupported(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.HttpVersionNotSupported);
}
/// <summary>
/// Returns a result indicating the server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.
/// Corresponds to HTTP status code 506 Variant Also Negotiates.
/// </summary>
public static Result<T> VariantAlsoNegotiates(T? value, string message) =>
VariantAlsoNegotiates(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.
/// Corresponds to HTTP status code 506 Variant Also Negotiates.
/// </summary>
public static Result<T> VariantAlsoNegotiates(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.VariantAlsoNegotiates);
}
/// <summary>
/// Returns a result indicating the server is unable to store the representation needed to complete the request.
/// Corresponds to HTTP status code 507 Insufficient Storage.
/// </summary>
public static Result<T> InsufficientStorage(T? value, string message) =>
InsufficientStorage(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the server is unable to store the representation needed to complete the request.
/// Corresponds to HTTP status code 507 Insufficient Storage.
/// </summary>
public static Result<T> InsufficientStorage(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.InsufficientStorage);
}
/// <summary>
/// Returns a result indicating the server detected an infinite loop while processing a request with depth: infinity. Usually encountered in WebDAV scenarios.
/// Corresponds to HTTP status code 508 Loop Detected.
/// </summary>
public static Result<T> LoopDetected(T? value, string message) =>
LoopDetected(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the server detected an infinite loop while processing a request with depth: infinity. Usually encountered in WebDAV scenarios.
/// Corresponds to HTTP status code 508 Loop Detected.
/// </summary>
public static Result<T> LoopDetected(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.LoopDetected);
}
/// <summary>
/// Returns a result indicating further extensions to the request are required for the server to fulfill it.
/// Corresponds to HTTP status code 510 Not Extended.
/// </summary>
public static Result<T> NotExtended(T? value, string message) =>
NotExtended(value, new List<string> { message });
/// <summary>
/// Returns a result indicating further extensions to the request are required for the server to fulfill it.
/// Corresponds to HTTP status code 510 Not Extended.
/// </summary>
public static Result<T> NotExtended(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.NotExtended);
}
/// <summary>
/// Returns a result indicating the client needs to authenticate to gain network access.
/// Corresponds to HTTP status code 511 Network Authentication Required.
/// </summary>
public static Result<T> NetworkAuthenticationRequired(T? value, string message) =>
NetworkAuthenticationRequired(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the client needs to authenticate to gain network access.
/// Corresponds to HTTP status code 511 Network Authentication Required.
/// </summary>
public static Result<T> NetworkAuthenticationRequired(T? value, List<string> messages) {
return new Result<T>(value, false, messages, HttpStatusCode.NetworkAuthenticationRequired);
}
}

View File

@ -1,169 +1,309 @@
using System.Net;
namespace MaksIT.Results {
public partial class Result {
namespace MaksIT.Results;
/// <summary>
/// Returns a result indicating the request was successful and the server returned the requested data.
/// Corresponds to HTTP status code 200 OK.
/// </summary>
public static Result Ok(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.OK);
}
public partial class Result {
/// <summary>
/// Returns a result indicating the request was successful and a new resource was created.
/// Corresponds to HTTP status code 201 Created.
/// </summary>
public static Result Created(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.Created);
}
/// <summary>
/// Returns a result indicating the request was successful and the server returned the requested data.
/// Corresponds to HTTP status code 200 OK.
/// </summary>
public static Result Ok(string message) =>
Ok(new List<string> { message });
/// <summary>
/// Returns a result indicating the request has been accepted for processing, but the processing is not yet complete.
/// Corresponds to HTTP status code 202 Accepted.
/// </summary>
public static Result Accepted(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.Accepted);
}
/// <summary>
/// Returns a result indicating the request was successful but the response contains metadata from a source other than the origin server.
/// Corresponds to HTTP status code 203 Non-Authoritative Information.
/// </summary>
public static Result NonAuthoritativeInformation(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.NonAuthoritativeInformation);
}
/// <summary>
/// Returns a result indicating the request was successful but there is no content to send in the response.
/// Corresponds to HTTP status code 204 No Content.
/// </summary>
public static Result NoContent(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.NoContent);
}
/// <summary>
/// Returns a result indicating the request was successful, but the user-agent should reset the document view that caused the request.
/// Corresponds to HTTP status code 205 Reset Content.
/// </summary>
public static Result ResetContent(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.ResetContent);
}
/// <summary>
/// Returns a result indicating the request was successful and the server is delivering only part of the resource due to a range header sent by the client.
/// Corresponds to HTTP status code 206 Partial Content.
/// </summary>
public static Result PartialContent(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.PartialContent);
}
/// <summary>
/// Returns a result indicating the request was successful and the response contains multiple status codes, typically used for WebDAV.
/// Corresponds to HTTP status code 207 Multi-Status.
/// </summary>
public static Result MultiStatus(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.MultiStatus);
}
/// <summary>
/// Returns a result indicating the request was successful and the information has already been reported in a previous response.
/// Corresponds to HTTP status code 208 Already Reported.
/// </summary>
public static Result AlreadyReported(params string[] messages) {
return new Result(true, new List<string>(messages), HttpStatusCode.AlreadyReported);
}
/// <summary>
/// Returns a result indicating the request was successful and the server fulfilled the request for the resource using the delta encoding method.
/// Corresponds to HTTP status code 226 IM Used.
/// </summary>
public static Result IMUsed(params string[] messages) {
return new Result(true, new List<string>(messages), (HttpStatusCode)226); // 226 is the official status code for IM Used
}
/// <summary>
/// Returns a result indicating the request was successful and the server returned the requested data.
/// Corresponds to HTTP status code 200 OK.
/// </summary>
public static Result Ok(List<string> messages) {
return new Result(true, messages, HttpStatusCode.OK);
}
public partial class Result<T> : Result {
/// <summary>
/// Returns a result indicating the request was successful and the server returned the requested data.
/// Corresponds to HTTP status code 200 OK.
/// </summary>
public static Result<T> Ok(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.OK);
}
/// <summary>
/// Returns a result indicating the request was successful and a new resource was created.
/// Corresponds to HTTP status code 201 Created.
/// </summary>
public static Result Created(string message) =>
Created(new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and a new resource was created.
/// Corresponds to HTTP status code 201 Created.
/// </summary>
public static Result<T> Created(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.Created);
}
/// <summary>
/// Returns a result indicating the request was successful and a new resource was created.
/// Corresponds to HTTP status code 201 Created.
/// </summary>
public static Result Created(List<string> messages) {
return new Result(true, messages, HttpStatusCode.Created);
}
/// <summary>
/// Returns a result indicating the request has been accepted for processing, but the processing is not yet complete.
/// Corresponds to HTTP status code 202 Accepted.
/// </summary>
public static Result<T> Accepted(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.Accepted);
}
/// <summary>
/// Returns a result indicating the request has been accepted for processing, but the processing is not yet complete.
/// Corresponds to HTTP status code 202 Accepted.
/// </summary>
public static Result Accepted(string message) =>
Accepted(new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful but the response contains metadata from a source other than the origin server.
/// Corresponds to HTTP status code 203 Non-Authoritative Information.
/// </summary>
public static Result<T> NonAuthoritativeInformation(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.NonAuthoritativeInformation);
}
/// <summary>
/// Returns a result indicating the request has been accepted for processing, but the processing is not yet complete.
/// Corresponds to HTTP status code 202 Accepted.
/// </summary>
public static Result Accepted(List<string> messages) {
return new Result(true, messages, HttpStatusCode.Accepted);
}
/// <summary>
/// Returns a result indicating the request was successful but there is no content to send in the response.
/// Corresponds to HTTP status code 204 No Content.
/// </summary>
public static Result<T> NoContent(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.NoContent);
}
/// <summary>
/// Returns a result indicating the request was successful but the response contains metadata from a source other than the origin server.
/// Corresponds to HTTP status code 203 Non-Authoritative Information.
/// </summary>
public static Result NonAuthoritativeInformation(string message) =>
NonAuthoritativeInformation(new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful, but the user-agent should reset the document view that caused the request.
/// Corresponds to HTTP status code 205 Reset Content.
/// </summary>
public static Result<T> ResetContent(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.ResetContent);
}
/// <summary>
/// Returns a result indicating the request was successful but the response contains metadata from a source other than the origin server.
/// Corresponds to HTTP status code 203 Non-Authoritative Information.
/// </summary>
public static Result NonAuthoritativeInformation(List<string> messages) {
return new Result(true, messages, HttpStatusCode.NonAuthoritativeInformation);
}
/// <summary>
/// Returns a result indicating the request was successful and the server is delivering only part of the resource due to a range header sent by the client.
/// Corresponds to HTTP status code 206 Partial Content.
/// </summary>
public static Result<T> PartialContent(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.PartialContent);
}
/// <summary>
/// Returns a result indicating the request was successful but there is no content to send in the response.
/// Corresponds to HTTP status code 204 No Content.
/// </summary>
public static Result NoContent(string message) =>
ResetContent(new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and the response contains multiple status codes, typically used for WebDAV.
/// Corresponds to HTTP status code 207 Multi-Status.
/// </summary>
public static Result<T> MultiStatus(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.MultiStatus);
}
/// <summary>
/// Returns a result indicating the request was successful but there is no content to send in the response.
/// Corresponds to HTTP status code 204 No Content.
/// </summary>
public static Result NoContent(List<string> messages) {
return new Result(true, messages, HttpStatusCode.NoContent);
}
/// <summary>
/// Returns a result indicating the request was successful and the information has already been reported in a previous response.
/// Corresponds to HTTP status code 208 Already Reported.
/// </summary>
public static Result<T> AlreadyReported(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), HttpStatusCode.AlreadyReported);
}
/// <summary>
/// Returns a result indicating the request was successful, but the user-agent should reset the document view that caused the request.
/// Corresponds to HTTP status code 205 Reset Content.
/// </summary>
public static Result ResetContent(string message) =>
ResetContent(new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and the server fulfilled the request for the resource using the delta encoding method.
/// Corresponds to HTTP status code 226 IM Used.
/// </summary>
public static Result<T> IMUsed(T? value, params string[] messages) {
return new Result<T>(value, true, new List<string>(messages), (HttpStatusCode)226); // 226 is the official status code for IM Used
}
/// <summary>
/// Returns a result indicating the request was successful, but the user-agent should reset the document view that caused the request.
/// Corresponds to HTTP status code 205 Reset Content.
/// </summary>
public static Result ResetContent(List<string> messages) {
return new Result(true, messages, HttpStatusCode.ResetContent);
}
/// <summary>
/// Returns a result indicating the request was successful and the server is delivering only part of the resource due to a range header sent by the client.
/// Corresponds to HTTP status code 206 Partial Content.
/// </summary>
public static Result PartialContent(string message) =>
PartialContent(new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and the server is delivering only part of the resource due to a range header sent by the client.
/// Corresponds to HTTP status code 206 Partial Content.
/// </summary>
public static Result PartialContent(List<string> messages) {
return new Result(true, messages, HttpStatusCode.PartialContent);
}
/// <summary>
/// Returns a result indicating the request was successful and the response contains multiple status codes, typically used for WebDAV.
/// Corresponds to HTTP status code 207 Multi-Status.
/// </summary>
public static Result MultiStatus(string message) =>
MultiStatus(new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and the response contains multiple status codes, typically used for WebDAV.
/// Corresponds to HTTP status code 207 Multi-Status.
/// </summary>
public static Result MultiStatus(List<string> messages) {
return new Result(true, messages, HttpStatusCode.MultiStatus);
}
/// <summary>
/// Returns a result indicating the request was successful and the information has already been reported in a previous response.
/// Corresponds to HTTP status code 208 Already Reported.
/// </summary>
public static Result AlreadyReported(string message) =>
AlreadyReported(new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and the information has already been reported in a previous response.
/// Corresponds to HTTP status code 208 Already Reported.
/// </summary>
public static Result AlreadyReported(List<string> messages) {
return new Result(true, messages, HttpStatusCode.AlreadyReported);
}
/// <summary>
/// Returns a result indicating the request was successful and the server fulfilled the request for the resource using the delta encoding method.
/// Corresponds to HTTP status code 226 IM Used.
/// </summary>
public static Result IMUsed(string message) =>
IMUsed(new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and the server fulfilled the request for the resource using the delta encoding method.
/// Corresponds to HTTP status code 226 IM Used.
/// </summary>
public static Result IMUsed(List<string> messages) {
return new Result(true, messages, (HttpStatusCode)226); // 226 is the official status code for IM Used
}
}
public partial class Result<T> : Result {
/// <summary>
/// Returns a result indicating the request was successful and the server returned the requested data.
/// Corresponds to HTTP status code 200 OK.
/// </summary>
public static Result<T> Ok(T? value, string message) =>
Ok(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and the server returned the requested data.
/// Corresponds to HTTP status code 200 OK.
/// </summary>
public static Result<T> Ok(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.OK);
}
/// <summary>
/// Returns a result indicating the request was successful and a new resource was created.
/// Corresponds to HTTP status code 201 Created.
/// </summary>
public static Result<T> Created(T? value, string message) =>
Created(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and a new resource was created.
/// Corresponds to HTTP status code 201 Created.
/// </summary>
public static Result<T> Created(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.Created);
}
/// <summary>
/// Returns a result indicating the request has been accepted for processing, but the processing is not yet complete.
/// Corresponds to HTTP status code 202 Accepted.
/// </summary>
public static Result<T> Accepted(T? value, string message) =>
Accepted(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the request has been accepted for processing, but the processing is not yet complete.
/// Corresponds to HTTP status code 202 Accepted.
/// </summary>
public static Result<T> Accepted(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.Accepted);
}
/// <summary>
/// Returns a result indicating the request was successful but the response contains metadata from a source other than the origin server.
/// Corresponds to HTTP status code 203 Non-Authoritative Information.
/// </summary>
public static Result<T> NonAuthoritativeInformation(T? value, string message) =>
NonAuthoritativeInformation(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful but the response contains metadata from a source other than the origin server.
/// Corresponds to HTTP status code 203 Non-Authoritative Information.
/// </summary>
public static Result<T> NonAuthoritativeInformation(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.NonAuthoritativeInformation);
}
/// <summary>
/// Returns a result indicating the request was successful but there is no content to send in the response.
/// Corresponds to HTTP status code 204 No Content.
/// </summary>
public static Result<T> NoContent(T? value, string message) =>
NoContent(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful but there is no content to send in the response.
/// Corresponds to HTTP status code 204 No Content.
/// </summary>
public static Result<T> NoContent(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.NoContent);
}
/// <summary>
/// Returns a result indicating the request was successful, but the user-agent should reset the document view that caused the request.
/// Corresponds to HTTP status code 205 Reset Content.
/// </summary>
public static Result<T> ResetContent(T? value, string message) =>
ResetContent(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful, but the user-agent should reset the document view that caused the request.
/// Corresponds to HTTP status code 205 Reset Content.
/// </summary>
public static Result<T> ResetContent(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.ResetContent);
}
/// <summary>
/// Returns a result indicating the request was successful and the server is delivering only part of the resource due to a range header sent by the client.
/// Corresponds to HTTP status code 206 Partial Content.
/// </summary>
public static Result<T> PartialContent(T? value, string message) =>
PartialContent(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and the server is delivering only part of the resource due to a range header sent by the client.
/// Corresponds to HTTP status code 206 Partial Content.
/// </summary>
public static Result<T> PartialContent(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.PartialContent);
}
/// <summary>
/// Returns a result indicating the request was successful and the response contains multiple status codes, typically used for WebDAV.
/// Corresponds to HTTP status code 207 Multi-Status.
/// </summary>
public static Result<T> MultiStatus(T? value, string message) =>
MultiStatus(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and the response contains multiple status codes, typically used for WebDAV.
/// Corresponds to HTTP status code 207 Multi-Status.
/// </summary>
public static Result<T> MultiStatus(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.MultiStatus);
}
/// <summary>
/// Returns a result indicating the request was successful and the information has already been reported in a previous response.
/// Corresponds to HTTP status code 208 Already Reported.
/// </summary>
public static Result<T> AlreadyReported(T? value, string message) =>
AlreadyReported(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and the information has already been reported in a previous response.
/// Corresponds to HTTP status code 208 Already Reported.
/// </summary>
public static Result<T> AlreadyReported(T? value, List<string> messages) {
return new Result<T>(value, true, messages, HttpStatusCode.AlreadyReported);
}
/// <summary>
/// Returns a result indicating the request was successful and the server fulfilled the request for the resource using the delta encoding method.
/// Corresponds to HTTP status code 226 IM Used.
/// </summary>
public static Result<T> IMUsed(T? value, string message) =>
IMUsed(value, new List<string> { message });
/// <summary>
/// Returns a result indicating the request was successful and the server fulfilled the request for the resource using the delta encoding method.
/// Corresponds to HTTP status code 226 IM Used.
/// </summary>
public static Result<T> IMUsed(T? value, List<string> messages) {
return new Result<T>(value, true, messages, (HttpStatusCode)226); // 226 is the official status code for IM Used
}
}

View File

@ -1,81 +1,88 @@
using Microsoft.AspNetCore.Mvc;
using System.Net;
namespace MaksIT.Results {
namespace MaksIT.Results;
public partial class Result {
public bool IsSuccess { get; }
public List<string> Messages { get; }
public HttpStatusCode StatusCode { get; }
public partial class Result {
public bool IsSuccess { get; }
public List<string> Messages { get; }
public HttpStatusCode StatusCode { get; }
protected Result(bool isSuccess, List<string> messages, HttpStatusCode statusCode) {
IsSuccess = isSuccess;
Messages = messages ?? new List<string>();
StatusCode = statusCode;
}
/// <summary>
/// Converts the current Result{T} to a non-generic Result.
/// </summary>
/// <returns>A non-generic Result object.</returns>
public Result ToResult() {
return new Result(IsSuccess, Messages, StatusCode);
}
/// <summary>
/// Converts the current Result to an IActionResult.
/// </summary>
/// <returns>IActionResult that represents the HTTP response.</returns>
public virtual IActionResult ToActionResult() {
if (IsSuccess) {
return new StatusCodeResult((int)StatusCode);
}
else {
var problemDetails = new ProblemDetails {
Status = (int)StatusCode,
Title = "An error occurred",
Detail = string.Join("; ", Messages),
Instance = null // You can customize the instance URI if needed
};
return new ObjectResult(problemDetails) { StatusCode = (int)StatusCode };
}
}
protected Result(bool isSuccess, List<string> messages, HttpStatusCode statusCode) {
IsSuccess = isSuccess;
Messages = messages ?? new List<string>();
StatusCode = statusCode;
}
public partial class Result<T> : Result {
public T? Value { get; }
/// <summary>
/// Converts the current Result{T} to a non-generic Result.
/// </summary>
/// <returns>A non-generic Result object.</returns>
public Result ToResult() {
return new Result(IsSuccess, Messages, StatusCode);
}
protected Result(T? value, bool isSuccess, List<string> messages, HttpStatusCode statusCode)
: base(isSuccess, messages, statusCode) {
Value = value;
/// <summary>
/// Converts this Result into a Result of another type while retaining the same success status, messages, and status code.
/// </summary>
/// <typeparam name="U">The target type for the Result.</typeparam>
/// <param name="value">The new value of type U for the converted Result.</param>
/// <returns>A Result of type U.</returns>
public Result<U?> ToResultOfType<U>(U? value) {
return new Result<U?>(value, IsSuccess, Messages, StatusCode);
}
/// <summary>
/// Converts the current Result to an IActionResult.
/// </summary>
/// <returns>IActionResult that represents the HTTP response.</returns>
public virtual IActionResult ToActionResult() {
if (IsSuccess) {
return new StatusCodeResult((int)StatusCode);
}
/// <summary>
/// Creates a new <see cref="Result{U}"/> by applying a transformation function to the current value.
/// </summary>
/// <typeparam name="U">The type of the new value.</typeparam>
/// <param name="newValueFunc">A function that transforms the current value to the new value, which can be null.</param>
/// <returns>A new <see cref="Result{U}"/> object containing the transformed value, along with the original success status, messages, and status code.</returns>
public Result<U?> WithNewValue<U>(Func<T?, U?> newValueFunc) {
return new Result<U?>(newValueFunc(Value), IsSuccess, Messages, StatusCode);
}
/// <summary>
/// Converts the current Result<T> to an IActionResult.
/// </summary>
/// <returns>IActionResult that represents the HTTP response.</returns>
public override IActionResult ToActionResult() {
if (IsSuccess) {
if (Value is not null) {
return new ObjectResult(Value) { StatusCode = (int)StatusCode };
}
return base.ToActionResult();
}
else {
return base.ToActionResult();
}
else {
var problemDetails = new ProblemDetails {
Status = (int)StatusCode,
Title = "An error occurred",
Detail = string.Join("; ", Messages),
Instance = null // You can customize the instance URI if needed
};
return new ObjectResult(problemDetails) { StatusCode = (int)StatusCode };
}
}
}
public partial class Result<T> : Result {
public T? Value { get; }
public Result(T? value, bool isSuccess, List<string> messages, HttpStatusCode statusCode)
: base(isSuccess, messages, statusCode) {
Value = value;
}
/// <summary>
/// Converts this Result<T> to a Result<U> while retaining success status, messages, and status code.
/// </summary>
/// <typeparam name="U">The target type for the Result.</typeparam>
/// <param name="newValueFunc">A function to transform the current value to a new value of type U.</param>
/// <returns>A Result<U> containing the transformed value.</returns>
public Result<U?> ToResultOfType<U>(Func<T?, U?> newValueFunc) {
return new Result<U?>(newValueFunc(Value), IsSuccess, Messages, StatusCode);
}
/// <summary>
/// Converts the current Result<T> to an IActionResult.
/// </summary>
/// <returns>IActionResult that represents the HTTP response.</returns>
public override IActionResult ToActionResult() {
if (IsSuccess) {
if (Value is not null) {
return new ObjectResult(Value) { StatusCode = (int)StatusCode };
}
return base.ToActionResult();
}
else {
return base.ToActionResult();
}
}
}