[dependencies]
enumset_derive = { version = "0.2.0", path = "../enumset_derive" }
-num-traits = { version = "0.2", default-features = false }
\ No newline at end of file
+num-traits = { version = "0.2", default-features = false }
+serde = { version = "1.0", optional = true }
#[cfg(test)] extern crate core;
extern crate enumset_derive;
extern crate num_traits;
+#[cfg(feature = "serde")] extern crate serde;
pub use enumset_derive::*;
mod enumset { pub use super::*; }
}
}
+#[cfg(feature = "serde")]
+impl <T : EnumSetType > serde::Serialize for EnumSet<T> {
+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
+ where
+ S: serde::Serializer,
+ {
+ serializer.serialize_u128(self.to_bits())
+ }
+}
+
+#[cfg(feature = "serde")]
+impl <'de, T : EnumSetType > serde::Deserialize<'de> for EnumSet<T> {
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
+ where
+ D: serde::Deserializer<'de>,
+ {
+ u128::deserialize(deserializer).map(EnumSet::from_bits)
+ }
+}
+
/// The iterator used by [`EnumSet`](./struct.EnumSet.html).
#[derive(Copy, Clone, PartialOrd, Ord, PartialEq, Eq, Hash, Debug)]
pub struct EnumSetIter<T : EnumSetType>(EnumSet<T>, u8);