diff --git a/core/src/errors/ext.rs b/core/src/errors/ext.rs index 62e7bbf..54d5e24 100644 --- a/core/src/errors/ext.rs +++ b/core/src/errors/ext.rs @@ -44,6 +44,46 @@ impl ResultExt for Result { } } +pub trait BoolExt: Sized { + fn true_or(self, err: E) -> Result<(), E>; + fn false_or(self, err: E) -> Result<(), E>; +} + +impl BoolExt for bool { + fn true_or(self, err: E) -> Result<(), E> { + if self { + Ok(()) + } else { + Err(err) + } + } + + fn false_or(self, err: E) -> Result<(), E> { + if self { + Err(err) + } else { + Ok(()) + } + } +} + +pub trait OptExt: Sized { + type Inside; + + fn none_or(self, f: impl FnOnce(Self::Inside) -> E) -> Result<(), E>; +} + +impl OptExt for Option { + type Inside = T; + + fn none_or(self, f: impl FnOnce(Self::Inside) -> E) -> Result<(), E> { + match self { + Some(v) => Err(f(v)), + None => Ok(()) + } + } +} + pub trait ErrExt: Sized { #[track_caller] fn aux(self) -> Aux