combineResult<T extends Object> function

Result<List<T>> combineResult<T extends Object>(
  1. Iterable<Result<T>> results, {
  2. @noFutures Err<List<T>> onErr(
    1. List<Result<T>> allResults
    )?,
})

Combines an iterable of Results into one containing a list of their values.

If any Result is an Err, applies the onErr function to combine errors.

Implementation

Result<List<T>> combineResult<T extends Object>(
  Iterable<Result<T>> results, {
  @noFutures Err<List<T>> Function(List<Result<T>> allResults)? onErr,
}) {
  final successes = <T>[];
  final asList = results.toList();
  for (final result in asList) {
    switch (result) {
      case Ok(value: final value):
        successes.add(value);
      case final Err err:
        if (onErr != null) {
          return onErr(asList);
        } else {
          return err.transfErr();
        }
    }
  }
  return Ok(successes);
}