diff options
Diffstat (limited to 'src/error.rs')
| -rw-r--r-- | src/error.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/error.rs b/src/error.rs index f3f1ca9..f034683 100644 --- a/src/error.rs +++ b/src/error.rs @@ -96,3 +96,36 @@ pub fn ignore_errors(mut body: impl FnMut() -> Result<()>) -> () { } } + +pub enum Acceptable<T> { + Accepted(T), + Rejected(String), +} + +impl<T> Acceptable<T> { + #[allow(unused)] + pub fn is_accepted(&self) -> bool { + if let Acceptable::Accepted(_) = self { true } else { false } + } + + #[allow(unused)] + pub fn is_rejected(&self) -> bool { + if let Acceptable::Rejected(_) = self { true } else { false } + } + + #[allow(unused)] + pub fn unwrap(self) -> T { + if let Acceptable::Accepted(result) = self { + result + } else { + panic!("Unwrapped a rejected Acceptable."); + } + } + + pub fn require(self) -> Result<T> { + match self { + Acceptable::Accepted(value) => Ok(value), + Acceptable::Rejected(message) => Err(Error { message }), + } + } +} |