From 797d41f7d294a65d52e9a1677289bb970895fb78 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Wed, 17 Oct 2018 17:18:43 +0200 Subject: [PATCH] Add an enum_set! macro. This is a convenience macro creating an EnumSet from a list of items, pretty similar to vec! for Vec. --- src/lib.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index f76c18b..9d2c6ab 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -269,6 +269,15 @@ impl<'a, E: CLike> IntoIterator for &'a EnumSet { fn into_iter(self) -> Iter { self.iter() } } +#[macro_export] +macro_rules! enum_set { + ($($x:expr),*) => ({ + let mut ret = EnumSet::new(); + $(ret.insert($x);)* + ret + }); +} + #[cfg(test)] mod tests { use self::Foo::*; @@ -521,4 +530,17 @@ mod tests { let mut set = EnumSet::new(); set.insert(Bar::V32); } + + #[test] + fn test_macro() { + let mut e1: EnumSet = EnumSet::new(); + e1.insert(A); + e1.insert(B); + let e2: EnumSet = enum_set!(A, B); + assert_eq!(e1, e2); + + let e1: EnumSet = EnumSet::new(); + let e2: EnumSet = enum_set!(); + assert_eq!(e1, e2); + } }