namespace Toolkit.Foundation; public record Result : Result { private readonly TValue? value; protected internal Result(TValue? value, bool isSuccess, Error error) : base(isSuccess, error) => this.value = value; public TValue? Value => IsSuccess ? value! : default; public static implicit operator Result(TValue? value) => Create(value); } public record Result(bool IsSuccess, Error Error) { public bool IsFailure => !IsSuccess; public static Result Success() => new(true, Error.None); public static Result Success(TValue value) => new(value, true, Error.None); public static Result Failure(Error error) => new(false, error); public static Result Failure(Error error) => new(default, false, error); public static Result Create(bool condition) => condition ? Success() : Failure(Error.ConditionNotMet); public static Result Create(TValue? value) => value is not null ? Success(value) : Failure(Error.Null); }