|
@@ -7,25 +7,21 @@ namespace InABox.Core
|
|
|
{
|
|
|
public static class Result
|
|
|
{
|
|
|
- public static Result<E> Ok<E>()
|
|
|
+ public static OkResult Ok()
|
|
|
{
|
|
|
- return new Result<E>();
|
|
|
+ return new OkResult();
|
|
|
}
|
|
|
- public static Result<E> Error<E>(E error)
|
|
|
+ public static ErrorResult<E> Error<E>(E error)
|
|
|
{
|
|
|
- return new Result<E>(error);
|
|
|
+ return new ErrorResult<E>(error);
|
|
|
}
|
|
|
|
|
|
- public static Result<T, E> Ok<T, E>(T value)
|
|
|
- {
|
|
|
- return new Result<T, E>(value);
|
|
|
- }
|
|
|
- public static Result<T, E> Error<T, E>(E error)
|
|
|
+ public static OkResult<T> Ok<T>(T value)
|
|
|
{
|
|
|
- return new Result<T, E>(error);
|
|
|
+ return new OkResult<T>(value);
|
|
|
}
|
|
|
|
|
|
- public static Result<E> Flatten<E>(this Result<Result<E>, E> result)
|
|
|
+ public static Result<T, E> Flatten<T, E>(this Result<Result<T, E>, E> result)
|
|
|
{
|
|
|
if(result.Get(out var inner, out var error))
|
|
|
{
|
|
@@ -36,16 +32,29 @@ namespace InABox.Core
|
|
|
return Result.Error(error);
|
|
|
}
|
|
|
}
|
|
|
- public static Result<T, E> Flatten<T, E>(this Result<Result<T, E>, E> result)
|
|
|
+ }
|
|
|
+
|
|
|
+ public class OkResult
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ public class OkResult<T>
|
|
|
+ {
|
|
|
+ public T Value;
|
|
|
+
|
|
|
+ public OkResult(T value)
|
|
|
{
|
|
|
- if(result.Get(out var inner, out var error))
|
|
|
- {
|
|
|
- return inner;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- return Result.Error<T, E>(error);
|
|
|
- }
|
|
|
+ Value = value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public class ErrorResult<E>
|
|
|
+ {
|
|
|
+ public E Error;
|
|
|
+
|
|
|
+ public ErrorResult(E error)
|
|
|
+ {
|
|
|
+ Error = error;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -62,6 +71,7 @@ namespace InABox.Core
|
|
|
|
|
|
public Result()
|
|
|
{
|
|
|
+ _error = default;
|
|
|
_status = Status.Ok;
|
|
|
}
|
|
|
public Result(E error)
|
|
@@ -70,6 +80,15 @@ namespace InABox.Core
|
|
|
_status = Status.Error;
|
|
|
}
|
|
|
|
|
|
+ public static implicit operator Result<E>(OkResult r)
|
|
|
+ {
|
|
|
+ return new Result<E>();
|
|
|
+ }
|
|
|
+ public static implicit operator Result<E>(ErrorResult<E> r)
|
|
|
+ {
|
|
|
+ return new Result<E>(r.Error);
|
|
|
+ }
|
|
|
+
|
|
|
public bool Get([NotNullWhen(false)][MaybeNull] out E error)
|
|
|
{
|
|
|
error = _error;
|
|
@@ -80,11 +99,11 @@ namespace InABox.Core
|
|
|
{
|
|
|
if(_status == Status.Ok)
|
|
|
{
|
|
|
- return Result.Ok<U, E>(mapFunc());
|
|
|
+ return Result.Ok(mapFunc());
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Result.Error<U, E>(_error);
|
|
|
+ return Result.Error(_error);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -93,11 +112,11 @@ namespace InABox.Core
|
|
|
if(_status == Status.Ok)
|
|
|
{
|
|
|
mapFunc();
|
|
|
- return Result.Ok<E>();
|
|
|
+ return Result.Ok();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Result.Error<E>(_error);
|
|
|
+ return Result.Error(_error);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -114,6 +133,8 @@ namespace InABox.Core
|
|
|
private E _error;
|
|
|
private Status _status;
|
|
|
|
|
|
+ public bool IsOK => _status == Status.Ok;
|
|
|
+
|
|
|
public Result(T value)
|
|
|
{
|
|
|
_value = value;
|
|
@@ -127,6 +148,15 @@ namespace InABox.Core
|
|
|
_status = Status.Error;
|
|
|
}
|
|
|
|
|
|
+ public static implicit operator Result<T, E>(OkResult<T> r)
|
|
|
+ {
|
|
|
+ return new Result<T, E>(r.Value);
|
|
|
+ }
|
|
|
+ public static implicit operator Result<T, E>(ErrorResult<E> r)
|
|
|
+ {
|
|
|
+ return new Result<T, E>(r.Error);
|
|
|
+ }
|
|
|
+
|
|
|
public bool Get([NotNullWhen(true)][MaybeNull] out T value, [NotNullWhen(false)][MaybeNull] out E error)
|
|
|
{
|
|
|
value = _value;
|
|
@@ -138,11 +168,11 @@ namespace InABox.Core
|
|
|
{
|
|
|
if(_status == Status.Ok)
|
|
|
{
|
|
|
- return Result.Ok<U, E>(mapFunc(_value));
|
|
|
+ return Result.Ok(mapFunc(_value));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Result.Error<U, E>(_error);
|
|
|
+ return Result.Error(_error);
|
|
|
}
|
|
|
}
|
|
|
}
|