transpose method

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

Turns a result of an option into an optional result.

Ok(None()) becomes None(), Ok(Some(v)) becomes Some(Ok(v)), and Err(e) becomes Some(Err(e)), so an error is never mistaken for absence. It is the inverse of Option.transpose.

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

Implementation

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