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); + } }