transpose method
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)),
};
}