Ejemplo n.º 1
0
 public AsyncResultGroupByEnumerable(IAsyncResultEnumerable <TSuccess, TFailure> successEnumerable, Func <TSuccess, TKey> keySelector, Func <TSuccess, TElement> elementSelector)
 {
     _successEnumerable = successEnumerable;
     _keySelector       = keySelector;
     _elementSelector   = elementSelector;
 }
		public static IAsyncResultEnumerable<TResult, TFailure> Select<TSuccess, TResult, TFailure>(this IAsyncResultEnumerable<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();
		}
Ejemplo n.º 3
0
 public static IAsyncResultEnumerable <TSuccess, TFailure> Where <TSuccess, TFailure>(this IAsyncResultEnumerable <TSuccess, TFailure> source, Func <TSuccess, Task <Result <Unit, TFailure> > > failurePredicate)
 => source
 .SelectAsync(value => value
              .BindAsync(success => failurePredicate
                         .Invoke(success)
                         .Map(_ => success)
                         )
              )
 .AsAsyncResultEnumerable();
		public static IAsyncResultEnumerable<TResult, TFailure> SelectMany<TSuccess, TFailure, TBind, TResult>(this IAsyncResultEnumerable<TSuccess, TFailure> source, Func<TSuccess, IAsyncEnumerable<TBind>> bind, Func<TSuccess, TBind, Task<TResult>> resultSelector)
		{
			if (bind == null)
				throw new ArgumentNullException(nameof(bind));

			if (resultSelector == null)
				throw new ArgumentNullException(nameof(resultSelector));

			return source
				.SelectMany(result => result
					.Match(success =>
						bind
						.Invoke(success)
						.SelectAsync(obj => resultSelector.Invoke(success, obj))
						.Select(Result.Success<TResult, TFailure>),
						failure => AsyncEnumerable.Repeat(Result.Failure<TResult, TFailure>(failure), 1)
					)
				)
				.AsAsyncResultEnumerable();
		}
		public static IAsyncResultEnumerable<TResult, TFailure> SelectMany<TSuccess, TFailure, TBind, TResult>(this IAsyncResultEnumerable<TSuccess, TFailure> source, Func<TSuccess, Task<Result<TBind, TFailure>>> bind, Func<TSuccess, TBind, Task<TResult>> resultSelector)
		{
			if (bind == null)
				throw new ArgumentNullException(nameof(bind));

			if (resultSelector == null)
				throw new ArgumentNullException(nameof(resultSelector));

			return source
				.SelectAsync(result => result
					.MatchAsync(success =>
						bind
						.Invoke(success)
						.SelectAsync(value => resultSelector.Invoke(success, value)),
						failure => Task.FromResult(Result.Failure<TResult, TFailure>(failure))
					)
				)
				.AsAsyncResultEnumerable();
		}
Ejemplo n.º 6
0
        public static IAsyncResultEnumerable <TResult, TFailure> Select <TSuccess, TResult, TFailure>(this IAsyncResultEnumerable <TSuccess, TFailure> source, Func <TSuccess, TResult> selector)
        {
            if (selector == null)
            {
                throw new ArgumentNullException(nameof(selector));
            }

            return(source
                   .Select(result => result
                           .Match(
                               success => Result.Success <TResult, TFailure>(selector.Invoke(success)),
                               Result.Failure <TResult, TFailure>
                               )
                           )
                   .AsAsyncResultEnumerable());
        }
Ejemplo n.º 7
0
        public static IAsyncResultEnumerable <TResult, TFailure> SelectMany <TSuccess, TFailure, TBind, TResult>(this IAsyncResultEnumerable <TSuccess, TFailure> source, Func <TSuccess, Result <TBind, TFailure> > bind, Func <TSuccess, TBind, TResult> resultSelector)
        {
            if (bind == null)
            {
                throw new ArgumentNullException(nameof(bind));
            }

            if (resultSelector == null)
            {
                throw new ArgumentNullException(nameof(resultSelector));
            }

            return(source
                   .Select(result => result
                           .Match(success =>
                                  bind
                                  .Invoke(success)
                                  .Map(value => resultSelector.Invoke(success, value)),
                                  Result.Failure <TResult, TFailure>
                                  )
                           )
                   .AsAsyncResultEnumerable());
        }
 public static IAsyncResultEnumerable <IGrouping <TKey, TElement>, TFailure> GroupBy <TKey, TSuccess, TElement, TFailure>(this IAsyncResultEnumerable <TSuccess, TFailure> source, Func <TSuccess, TKey> keySelector, Func <TSuccess, TElement> elementSelector)
 => new AsyncResultGroupByEnumerable <TKey, TSuccess, TElement, TFailure>(source, keySelector, elementSelector);
Ejemplo n.º 9
0
 public static IAsyncResultEnumerable <IGrouping <TKey, TSuccess>, TFailure> GroupBy <TKey, TSuccess, TFailure>(this IAsyncResultEnumerable <TSuccess, TFailure> source, Func <TSuccess, TKey> keySelector)
     where TSuccess : notnull
     where TFailure : notnull
 => new AsyncResultGroupByEnumerable <TKey, TSuccess, TSuccess, TFailure>(source, keySelector, _ => _);
        public static IAsyncResultEnumerable <TResult, TFailure> SelectMany <TSuccess, TFailure, TBind, TResult>(this IAsyncResultEnumerable <TSuccess, TFailure> source, Func <TSuccess, IEnumerable <TBind> > bind, Func <TSuccess, TBind, TResult> resultSelector)
            where TSuccess : notnull
            where TFailure : notnull
            where TResult : notnull
        {
            if (bind == null)
            {
                throw new ArgumentNullException(nameof(bind));
            }

            if (resultSelector == null)
            {
                throw new ArgumentNullException(nameof(resultSelector));
            }

            return(source
                   .SelectMany(result => result
                               .Match(success =>
                                      bind
                                      .Invoke(success)
                                      .Select(obj => resultSelector.Invoke(success, obj))
                                      .Select(Result.Success <TResult, TFailure>),
                                      failure => Enumerable.Repeat(Result.Failure <TResult, TFailure>(failure), 1)
                                      )
                               )
                   .AsAsyncResultEnumerable());
        }