tuwunel_core/utils/result/
flat_ok.rs1use super::Result;
2
3pub trait FlatOk<T> {
9 fn flat_ok(self) -> Option<T>;
11
12 fn flat_ok_or<E>(self, err: E) -> Result<T, E>;
14
15 fn flat_ok_or_else<E, F: FnOnce() -> E>(self, err: F) -> Result<T, E>;
17}
18
19impl<T, E> FlatOk<T> for Option<Result<T, E>> {
20 #[inline]
21 fn flat_ok(self) -> Option<T> { self.transpose().ok().flatten() }
22
23 #[inline]
24 fn flat_ok_or<Ep>(self, err: Ep) -> Result<T, Ep> { self.flat_ok().ok_or(err) }
25
26 #[inline]
27 fn flat_ok_or_else<Ep, F: FnOnce() -> Ep>(self, err: F) -> Result<T, Ep> {
28 self.flat_ok().ok_or_else(err)
29 }
30}
31
32impl<T, E> FlatOk<T> for Result<Option<T>, E> {
33 #[inline]
34 fn flat_ok(self) -> Option<T> { self.ok().flatten() }
35
36 #[inline]
37 fn flat_ok_or<Ep>(self, err: Ep) -> Result<T, Ep> { self.flat_ok().ok_or(err) }
38
39 #[inline]
40 fn flat_ok_or_else<Ep, F: FnOnce() -> Ep>(self, err: F) -> Result<T, Ep> {
41 self.flat_ok().ok_or_else(err)
42 }
43}