//! Trait BoolExt /// Boolean extensions and chain.starters pub trait BoolExt { #[must_use] fn clone_or(self, err: T, t: &T) -> T; #[must_use] fn copy_or(self, err: T, t: T) -> T; #[must_use] fn expect(self, msg: &str) -> Self; #[must_use] fn expect_false(self, msg: &str) -> Self; fn into_option(self) -> Option<()>; #[allow(clippy::result_unit_err)] fn into_result(self) -> Result<(), ()>; fn map T>(self, f: F) -> T where Self: Sized; fn map_ok_or T>(self, err: E, f: F) -> Result; fn map_or T>(self, err: T, f: F) -> T; fn map_or_else T>(self, err: F, f: F) -> T; fn ok_or(self, err: E) -> Result<(), E>; fn ok_or_else E>(self, err: F) -> Result<(), E>; fn or T>(self, f: F) -> Option; fn or_some(self, t: T) -> Option; } impl BoolExt for bool { #[inline] fn clone_or(self, err: T, t: &T) -> T { self.map_or(err, || t.clone()) } #[inline] fn copy_or(self, err: T, t: T) -> T { self.map_or(err, || t) } #[inline] fn expect(self, msg: &str) -> Self { self.then_some(true).expect(msg) } #[inline] fn expect_false(self, msg: &str) -> Self { (!self).then_some(false).expect(msg) } #[inline] fn into_option(self) -> Option<()> { self.then_some(()) } #[inline] fn into_result(self) -> Result<(), ()> { self.ok_or(()) } #[inline] fn map T>(self, f: F) -> T where Self: Sized, { f(self) } #[inline] fn map_ok_or T>(self, err: E, f: F) -> Result { self.ok_or(err).map(|()| f()) } #[inline] fn map_or T>(self, err: T, f: F) -> T { self.then(f).unwrap_or(err) } #[inline] fn map_or_else T>(self, err: F, f: F) -> T { self.then(f).unwrap_or_else(err) } #[inline] fn ok_or(self, err: E) -> Result<(), E> { self.into_option().ok_or(err) } #[inline] fn ok_or_else E>(self, err: F) -> Result<(), E> { self.into_option().ok_or_else(err) } #[inline] fn or T>(self, f: F) -> Option { (!self).then(f) } #[inline] fn or_some(self, t: T) -> Option { (!self).then_some(t) } }