using DotBased.AspNet.Authority.Models.Validation; namespace DotBased.AspNet.Authority.Models; public class AuthorityResult<TResultValue> : Result<TResultValue> { public static AuthorityResult<TResultValue> FromResult(Result<TResultValue> result) => new AuthorityResult<TResultValue>(result); public AuthorityResult(Result<TResultValue> result) : base(result) { Reason = ResultFailReason.Unknown; } public AuthorityResult(bool success, string errorMessage = "", TResultValue? value = default, ResultFailReason reason = ResultFailReason.None, IReadOnlyList<ValidationError>? errors = null) : base(success, errorMessage, value, null) { Success = success; Message = errorMessage; Value = value; Reason = reason; ValidationErrors = errors; } public ResultFailReason Reason { get; } public IReadOnlyList<ValidationError>? ValidationErrors { get; } public static AuthorityResult<TResultValue> Ok(TResultValue? value) => new AuthorityResult<TResultValue>(true, value:value); public static AuthorityResult<TResultValue> Error(string errorMessage, ResultFailReason reason = ResultFailReason.Error) => new AuthorityResult<TResultValue>(false, errorMessage, reason:reason); public static AuthorityResult<TResultValue> Failed(IReadOnlyList<ValidationError> errors, ResultFailReason reason = ResultFailReason.None) => new AuthorityResult<TResultValue>(false, errors:errors, reason:reason); } public enum ResultFailReason { None, Unknown, Validation, Error }