< Summary

Information
Class: planora.Application.Common.Result<T>
Assembly: planora.Application
File(s): /home/runner/work/planora/planora/src/planora.Application/Common/Result.cs
Tag: 10_15767155620
Line coverage
100%
Covered lines: 6
Uncovered lines: 0
Coverable lines: 6
Total lines: 80
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Data()100%22100%
op_Implicit(...)100%11100%
op_Implicit(...)100%11100%

File(s)

/home/runner/work/planora/planora/src/planora.Application/Common/Result.cs

#LineLine coverage
 1// ReSharper disable MemberCanBePrivate.Global
 2// ReSharper disable UnusedAutoPropertyAccessor.Global
 3
 4using planora.Domain.Errors;
 5
 6namespace planora.Application.Common;
 7
 8public class Result
 9{
 10    protected Result(bool isSuccess, AppError? error)
 11    {
 12        if ((isSuccess && error is not null) ||
 13            (!isSuccess && error is null))
 14        {
 15            throw new ArgumentException("Invalid error", nameof(error));
 16        }
 17
 18        IsSuccess = isSuccess;
 19        Error = error;
 20    }
 21
 22    public bool IsSuccess { get; }
 23    public AppError? Error { get; }
 24
 25    public static Result Success()
 26    {
 27        return new Result(true, null);
 28    }
 29
 30    public static Result<TValue> Success<TValue>(TValue value)
 31    {
 32        return new Result<TValue>(value, true, null);
 33    }
 34
 35
 36    public static Result Failure(AppError appError)
 37    {
 38        return new Result(false, appError);
 39    }
 40
 41    public static Result<TValue> Failure<TValue>(AppError appError)
 42    {
 43        return new Result<TValue>(default, false, appError);
 44    }
 45
 46    // Implicit conversion from AppError to Result (failure)
 47    public static implicit operator Result(AppError appError)
 48    {
 49        return Failure(appError);
 50    }
 51}
 52
 1853public class Result<TValue>(TValue? data, bool isSuccess, AppError? error) : Result(isSuccess, error)
 54{
 55    public TValue Data
 56    {
 57        get
 58        {
 1659            if (!IsSuccess)
 60            {
 261                throw new InvalidOperationException("Cannot access the data of a failed result");
 62            }
 63
 1464            return data!;
 65        }
 66    }
 67
 68
 69    // Implicit conversion from TValue to Result<TValue> (success)
 70    public static implicit operator Result<TValue>(TValue value)
 71    {
 672        return Success(value);
 73    }
 74
 75    // Implicit conversion from AppError to Result<TValue> (failure)
 76    public static implicit operator Result<TValue>(AppError appError)
 77    {
 478        return Failure<TValue>(appError);
 79    }
 80}