| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- using System.Diagnostics.CodeAnalysis;
- namespace SharedKernel.Results;
- public class Result
- {
- public Result(bool isSuccess, Error error)
- {
- if (isSuccess && error != Error.None || !isSuccess && error == Error.None)
- {
- throw new ArgumentException("Invalid error", nameof(error));
- }
- IsSuccess = isSuccess;
- Error = error;
- }
- public bool IsSuccess { get; }
- public bool IsFailure => !IsSuccess;
- public Error Error { get; }
- public static Result Success()
- {
- return new(true, Error.None);
- }
- public static Result<TValue> Success<TValue>(TValue value)
- {
- return new(value, true, Error.None);
- }
- public static Result Failure(Error error)
- {
- return new(false, error);
- }
- public static Result<TValue> Failure<TValue>(Error error)
- {
- return new(default, false, error);
- }
- }
- public class Result<TValue> : Result
- {
- private readonly TValue? _value;
- public Result(TValue? value, bool isSuccess, Error error) : base(isSuccess, error)
- {
- _value = value;
- }
- [NotNull]
- public TValue Value => IsSuccess ? _value! : throw new InvalidOperationException("The value of a failure result can't be accessed.");
- public static implicit operator Result<TValue>(TValue? value)
- {
- return value is not null ? Success(value) : Failure<TValue>(Error.NullValue);
- }
- }
|