public static IAsyncResultEnumerable <TSuccess, TFailure> Where <TSuccess, TFailure>(this IResultEnumerable <TSuccess, TFailure> source, Func <TSuccess, Task <Result <Unit, TFailure> > > failurePredicate) => source .SelectAsync(value => value .BindAsync(success => failurePredicate .Invoke(success) .Select(_ => success) ) ) .AsAsyncResultEnumerable();
public static IAsyncResultEnumerable<TResult, TFailure> Select<TSuccess, TResult, TFailure>(this IResultEnumerable<TSuccess, TFailure> source, Func<TSuccess, Task<TResult>> selector) { if (selector == null) throw new ArgumentNullException(nameof(selector)); return source .SelectAsync(result => result .MatchAsync( success => Result.Success<TResult, TFailure>(selector.Invoke(success)), failure => Task.FromResult(Result.Failure<TResult, TFailure>(failure)) ) ) .AsAsyncResultEnumerable(); }