aboutsummaryrefslogtreecommitdiff
path: root/src/let_else.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/let_else.rs')
-rw-r--r--src/let_else.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/let_else.rs b/src/let_else.rs
index da17a68..a1627f1 100644
--- a/src/let_else.rs
+++ b/src/let_else.rs
@@ -21,3 +21,25 @@ right: {:?}",
}
pub(crate) use assume;
+
+/// Binds the given expression to the given pattern, or else executes
+/// `unreachable!();` with a helpful panic message and returns.
+macro_rules! know {
+ ($pattern:pat, $value:expr) => {
+ // The expression might change each time it's evaluated, so we
+ // have to bind it so that we can reuse it in the panic message.
+ let _value = $value;
+
+ let $pattern = _value else {
+ unreachable!(
+ "assertion `left matches right` failed:
+ left: {}
+right: {:?}",
+ stringify!($pattern),
+ _value
+ );
+ };
+ };
+}
+
+pub(crate) use know;