summary refs log tree commit diff
path: root/src/error.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/error.rs')
-rw-r--r--src/error.rs33
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 }),
+    }
+  }
+}