添加函数式异常类

This commit is contained in:
Sanchime 2022-05-13 22:18:29 +08:00
parent e8a5dd982d
commit fc916c10de
1 changed files with 37 additions and 0 deletions

View File

@ -0,0 +1,37 @@
namespace Sanchime.Functional.Products;
public readonly struct Exceptional<TValue>
{
internal Exception _exception { get; }
internal TValue _value { get; }
public bool Success => _exception is null;
public bool Exception => !Success;
internal Exceptional(Exception exception)
{
if (exception == null)
{
throw new ArgumentNullException(nameof(exception));
}
(_exception, _value) = (exception, default!);
}
internal Exceptional(TValue right)
=> (_value, _exception) = (right, default!);
public static implicit operator Exceptional<TValue>(Exception left)
=> new(left);
public static implicit operator Exceptional<TValue>(TValue right)
=> new(right);
public TRight Match<TRight>(Func<Exception, TRight> Exception, Func<TValue, TRight> Success)
=> this.Exception ? Exception(_exception) : Success(_value);
public override string ToString()
=> Match(e => $"Exception({e.Message})", v => $"Success({v})");
}