extended Ensure api
All checks were successful
.NET Test / test (push) Successful in 1m10s

This commit is contained in:
2024-02-11 00:11:14 +04:00
parent 719b4e85f5
commit e909eeae10
15 changed files with 284 additions and 53 deletions

View File

@@ -8,32 +8,9 @@ public static partial class Ensure
[Pure] public static Ensure<T> That<T>(T value, [CallerArgumentExpression(nameof(value))]string valueExpression = "") => new(value, valueExpression);
[Pure] public static Result<T> Result<T>(this in Ensure<T> ensure) => ensure.State switch
{
ResultState.Success => new(ensure.Value),
ResultState.Error => new(ensure.Error!),
_ => throw new EnsureNotInitializedException(nameof(ensure))
};
[Pure] public static async Task<Result<T>> Result<T>(this Task<Ensure<T>> ensureTask)
{
var ensure = await ensureTask.ConfigureAwait(false);
return ensure.State switch
{
ResultState.Success => new(ensure.Value),
ResultState.Error => new(ensure.Error!),
_ => throw new EnsureNotInitializedException(nameof(ensureTask))
};
}
[Pure] public static async ValueTask<Result<T>> Result<T>(this ValueTask<Ensure<T>> ensureTask)
{
var ensure = await ensureTask.ConfigureAwait(false);
return ensure.State switch
{
ResultState.Success => new(ensure.Value),
ResultState.Error => new(ensure.Error!),
_ => throw new EnsureNotInitializedException(nameof(ensureTask))
};
}
[Pure] public static Result<T> Result<T>(this in Ensure<T> ensure) => ensure;
[Pure] public static async Task<Result<T>> Result<T>(this Task<Ensure<T>> ensureTask) => await ensureTask.ConfigureAwait(false);
[Pure] public static async ValueTask<Result<T>> Result<T>(this ValueTask<Ensure<T>> ensureTask) => await ensureTask.ConfigureAwait(false);
}
public readonly struct Ensure<T>
@@ -58,6 +35,22 @@ public readonly struct Ensure<T>
Value = default!;
State = ResultState.Error;
}
[Pure]
public static implicit operator Result<T>(in Ensure<T> ensure) => ensure.State switch
{
ResultState.Success => new(ensure.Value),
ResultState.Error => new(ensure.Error!),
_ => throw new EnsureNotInitializedException(nameof(ensure))
};
[Pure]
public static explicit operator Result(in Ensure<T> ensure) => ensure.State switch
{
ResultState.Success => new(null),
ResultState.Error => new(ensure.Error!),
_ => throw new EnsureNotInitializedException(nameof(ensure))
};
}
[Serializable]