]> git.lizzy.rs Git - enumset.git/blobdiff - enumset/src/lib.rs
Added FromIterator/Extend operations for iterators of EnumSets.
[enumset.git] / enumset / src / lib.rs
index 252f3768452be614b70f38044f5efdd5fa99893f..bde7910bebe0673cfa1ad8de9d8df9e070b602f6 100644 (file)
@@ -461,19 +461,18 @@ macro_rules! conversion_impls {
 
 conversion_impls! {
     for_num!(u8, "u8", from_u8, to_u8,
-             from_u8 try_from_u8 from_u8_truncated to_u8 to_u8_checked to_u8_truncated);
+             from_u8 try_from_u8 from_u8_truncated as_u8 try_as_u8 as_u8_truncated);
     for_num!(u16, "u16", from_u16, to_u16,
-             from_u16 try_from_u16 from_u16_truncated to_u16 to_u16_checked to_u16_truncated);
+             from_u16 try_from_u16 from_u16_truncated as_u16 try_as_u16 as_u16_truncated);
     for_num!(u32, "u32", from_u32, to_u32,
-             from_u32 try_from_u32 from_u32_truncated to_u32 to_u32_checked to_u32_truncated);
+             from_u32 try_from_u32 from_u32_truncated as_u32 try_as_u32 as_u32_truncated);
     for_num!(u64, "u64", from_u64, to_u64,
-             from_u64 try_from_u64 from_u64_truncated to_u64 to_u64_checked to_u64_truncated);
+             from_u64 try_from_u64 from_u64_truncated as_u64 try_as_u64 as_u64_truncated);
     for_num!(u128, "u128", from_u128, to_u128,
-             from_u128 try_from_u128 from_u128_truncated to_u128
-             to_u128_checked to_u128_truncated);
+             from_u128 try_from_u128 from_u128_truncated as_u128 try_as_u128 as_u128_truncated);
     for_num!(usize, "usize", from_usize, to_usize,
              from_usize try_from_usize from_usize_truncated
-             to_usize to_usize_checked to_usize_truncated);
+             as_usize try_as_usize as_usize_truncated);
 }
 
 impl <T: EnumSetType> Default for EnumSet<T> {
@@ -637,6 +636,20 @@ impl<T: EnumSetType> FromIterator<T> for EnumSet<T> {
     }
 }
 
+impl<T: EnumSetType> Extend<EnumSet<T>> for EnumSet<T> {
+    fn extend<I: IntoIterator<Item = EnumSet<T>>>(&mut self, iter: I) {
+        iter.into_iter().for_each(|v| { self.insert_all(v); });
+    }
+}
+
+impl<T: EnumSetType> FromIterator<EnumSet<T>> for EnumSet<T> {
+    fn from_iter<I: IntoIterator<Item = EnumSet<T>>>(iter: I) -> Self {
+        let mut set = EnumSet::default();
+        set.extend(iter);
+        set
+    }
+}
+
 /// Creates a EnumSet literal, which can be used in const contexts.
 ///
 /// The syntax used is `enum_set!(Type::A | Type::B | Type::C)`. Each variant must be of the same