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