using DotBased.AspNet.Authority.Models.Validation; using DotBased.Monads; namespace DotBased.AspNet.Authority.Monads; public class AuthorityResult : Result { protected AuthorityResult(TResult result) : base(result) { } protected AuthorityResult(Exception exception) : base(exception) { } protected AuthorityResult(ResultError error) : base(error) { } protected AuthorityResult(List validationErrors) : base(ResultError.Fail("Validation failed!")) { _validationErrors = validationErrors; } private readonly List _validationErrors = []; public IReadOnlyList ValidationErrors => _validationErrors; public static implicit operator AuthorityResult(TResult result) => new(result); public static implicit operator AuthorityResult(Exception exception) => new(exception); public static implicit operator AuthorityResult(ResultError error) => new(error); public static implicit operator AuthorityResult(List validationErrors) => new(validationErrors); public static AuthorityResult FromResult(Result result) { var authorityResult = result.Match>( r => new AuthorityResult(r), error => new AuthorityResult(error)); return authorityResult; } }