Source code for stdlibx.option.methods.result
1from __future__ import annotations
2
3from typing import Callable, TypeVar
4
5from stdlibx.option import Nothing, Option, Some, is_some
6from stdlibx.result import Error, Ok, Result, is_err, is_ok
7
8T = TypeVar("T")
9U = TypeVar("U")
10E = TypeVar("E")
11
12
[docs]
13def ok_or(opt: Option[T], error: E) -> Result[T, E]:
14 if is_some(opt):
15 return Ok(opt.value)
16 return Error(error)
17
18
[docs]
19def ok_or_else(opt: Option[T], error: Callable[[], E]) -> Result[T, E]:
20 if is_some(opt):
21 return Ok(opt.value)
22 return Error(error())
23
24
[docs]
25def transpose(opt: Option[Result[U, E]]) -> Result[Option[U], E]:
26 if is_some(opt) and is_ok(opt.value):
27 return Ok(Some(opt.value.value))
28 elif is_some(opt) and is_err(opt.value):
29 return Error(opt.value.error)
30 else:
31 return Ok(Nothing())