transpose method

Result<Option<T>, E> transpose()

Turns an optional result into a result of an option.

None() becomes Ok(None()), Some(Ok(v)) becomes Ok(Some(v)), and Some(Err(e)) becomes Err(e) — so a failure is never hidden inside a present option.

const Option<Result<int, String>> parsed = Some(Ok(1));
final swapped = parsed.transpose(); // Ok(Some(1))

Implementation

Result<Option<T>, E> transpose() {
  return switch (this) {
    None<Result<T, E>>() => Ok<Option<T>, E>(None<T>()),
    Some<Result<T, E>>(value: Ok<T, E>(:final value)) =>
      Ok<Option<T>, E>(Some<T>(value)),
    Some<Result<T, E>>(value: Err<T, E>(:final error)) =>
      Err<Option<T>, E>(error),
  };
}