diff --git a/src/core/utils/bool.rs b/src/core/utils/bool.rs index b4192daf..b16f63e9 100644 --- a/src/core/utils/bool.rs +++ b/src/core/utils/bool.rs @@ -2,6 +2,10 @@ /// Boolean extensions and chain.starters pub trait BoolExt { + fn and<T>(self, t: Option<T>) -> Option<T>; + + fn and_then<T, F: FnOnce() -> Option<T>>(self, f: F) -> Option<T>; + #[must_use] fn clone_or<T: Clone>(self, err: T, t: &T) -> T; @@ -39,6 +43,12 @@ pub trait BoolExt { } impl BoolExt for bool { + #[inline] + fn and<T>(self, t: Option<T>) -> Option<T> { self.then_some(t).flatten() } + + #[inline] + fn and_then<T, F: FnOnce() -> Option<T>>(self, f: F) -> Option<T> { self.then(f).flatten() } + #[inline] fn clone_or<T: Clone>(self, err: T, t: &T) -> T { self.map_or(err, || t.clone()) }