chiark / gitweb /
utils: Improve matches_doesnot
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 14 Mar 2021 19:48:11 +0000 (19:48 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 14 Mar 2021 19:48:11 +0000 (19:48 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/utils.rs

index 4a4a29b60ead32e8e7009b0222402b9286890ada..de6dc560758e1256853c714a2a3addd010ace43c 100644 (file)
@@ -347,10 +347,25 @@ impl<T,U,E,F> IteratorExt<U,E,F> for T where
   }
 }
 
+#[macro_export] // <- otherwise bogus warning `unused_macros`
+macro_rules! matches_doesnot_yn2bool {
+  (=) => (true);
+  (!) => (false);
+}
+
 #[macro_export]
 macro_rules! matches_doesnot {
-  ($v:expr, = $($y:pat)|*, ! $($n:pat)|* $(,)?) =>
-  { match $v { $($y)|* => true, $($n)|* => false } }
+  ($v:expr,
+   $(
+     $yn:tt $($p:pat)|*
+   ),*
+  ) => {
+    match $v {
+      $(
+        $($p)|* => matches_doesnot_yn2bool!($yn),
+      )*
+    }
+  }
 }
 
 #[test]
@@ -369,6 +384,13 @@ fn matches_doesnot_test() {
       ! Some(_) | None
     )
   );
+  assert!(
+    ! matches_doesnot!(
+      Some(1),
+      ! Some(1) | Some(2),
+      = Some(_) | None
+    )
+  );
 }
 
 pub fn dbgc_helper(file: &'static str, line: u32,