public static IAsyncResult <T, TError> ToAsyncResult <T, TError>( this IAsyncMaybe <T> source, Func <TError> errorSelector ) { if (source is null) { throw new ArgumentNullException(nameof(source)); } if (errorSelector is null) { throw new ArgumentNullException(nameof(errorSelector)); } async Task <IResult <T, TError> > Run( IAsyncMaybe <T> asyncMaybe, Func <TError> func ) { if (await asyncMaybe.HasValue.ConfigureAwait(false)) { return(ErrorHandling.Result.Value <T, TError>(asyncMaybe.Value)); } return(ErrorHandling.Result.Error <T, TError>(func())); } return(Run(source, errorSelector).ToAsyncResult()); }
/// <summary> /// Returns a <see cref="IMaybe{T}" /> when awaited. /// </summary> /// <param name="source"> /// The <see cref="IMaybe{T}" />. /// </param> /// <typeparam name="T"> /// of <see cref="IMaybe{T}" />. /// The <typeparamref name="T" /> /// </typeparam> /// <returns></returns> public static TaskAwaiter <IMaybe <T> > GetAwaiter <T>(this IAsyncMaybe <T> source) => source is null ? throw new ArgumentNullException(nameof(source))
private static async Task <IMaybe <T> > Mapper <T>(IAsyncMaybe <T> source) => await source.HasValue.ConfigureAwait(false) ? ErrorHandling.Maybe.Value(source.Value) : ErrorHandling.Maybe.None <T>();
public Task Awaiting_Null_Throws() { IAsyncMaybe <string> maybe = null; return(Assert.ThrowsAsync <ArgumentNullException>(async() => { await maybe; })); }