diff --git a/MaybeError/AsyncExtensions.cs b/MaybeError/AsyncExtensions.cs new file mode 100644 index 0000000..b14de6e --- /dev/null +++ b/MaybeError/AsyncExtensions.cs @@ -0,0 +1,104 @@ +using MaybeError.Errors; + +namespace MaybeError; + +public static class AsyncExtensions +{ + #region ValueMaybe + + public static async Task ValueOrDefaultAsync(this Task> task, T defaultValue) where T : struct where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.ValueOrDefault(defaultValue); + } + + public static async ValueTask ValueOrDefaultAsync(this ValueTask> task, T defaultValue) where T : struct where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.ValueOrDefault(defaultValue); + } + + public static async Task ValueOrDefaultAsync(this Task> task) where T : struct where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.ValueOrDefault(); + } + + public static async ValueTask ValueOrDefaultAsync(this ValueTask> task) where T : struct where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.ValueOrDefault(); + } + + public static async Task AsAsync(this Task> task, Func predicate) where T : struct where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.As(predicate); + } + + public static async ValueTask AsAsync(this ValueTask> task, Func predicate) where T : struct where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.As(predicate); + } + + public static async Task AsOrDefaultAsync(this Task> task, Func predicate) where T : struct where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.AsOrDefault(predicate); + } + + public static async ValueTask AsOrDefaultAsync(this ValueTask> task, Func predicate) where T : struct where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.AsOrDefault(predicate); + } + + public static async Task AsOrDefaultAsync(this Task> task, Func predicate, R defaultValue) where T : struct where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.AsOrDefault(predicate, defaultValue); + } + + public static async ValueTask AsOrDefaultAsync(this ValueTask> task, Func predicate, R defaultValue) where T : struct where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.AsOrDefault(predicate, defaultValue); + } + + #endregion ValueMaybe + + #region Maybe + + public static async Task ValueOrDefaultAsync(this Task> task, T defaultValue) where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.ValueOrDefault(defaultValue); + } + + public static async Task ValueOrDefaultAsync(this Task> task) where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.ValueOrDefault(); + } + + public static async Task AsAsync(this Task> task, Func predicate) where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.As(predicate); + } + + public static async Task AsOrDefaultAsync(this Task> task, Func predicate) where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.AsOrDefault(predicate); + } + + public static async Task AsOrDefaultAsync(this Task> task, Func predicate, R defaultValue) where E : Error + { + var maybe = await task.ConfigureAwait(false); + return maybe.AsOrDefault(predicate, defaultValue); + } + + #endregion Maybe +} \ No newline at end of file