namespace Application.Common.Results; public class Result { protected Result(bool isSuccess, Error error) { if ((isSuccess && error != Error.None) || (!isSuccess && error == Error.None)) throw new InvalidOperationException("Invalid operation"); IsSuccess = isSuccess; Error = error; } public bool IsSuccess { get; } public bool IsFailure => !IsSuccess; public Error Error { get; } public static Result Success() { return new Result(true, Error.None); } public static Result Success(TValue value) { return new Result(value, true, Error.None); } public static Result Failure(Error error) { return new Result(false, error); } public static Result Failure(Error error) { return new Result(default!, false, error); } }