enumset_derive = { version = "0.2.0", path = "../enumset_derive" }
num-traits = { version = "0.2", default-features = false }
serde = { version = "1.0", default-features = false, optional = true }
+
+[dev-dependencies]
+bincode = { version = "1.0", features = ["i128"] }
\ No newline at end of file
}
#[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,
- {
+impl <T : EnumSetType> serde::Serialize for EnumSet<T> {
+ fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
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>,
- {
+impl <'de, T : EnumSetType> serde::Deserialize<'de> for EnumSet<T> {
+ fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
u128::deserialize(deserializer).map(EnumSet::from_bits)
}
}
mod test {
use super::*;
+ #[cfg(feature = "serde")]
+ extern crate bincode;
+
mod enums {
#[derive(::EnumSetType, Debug)]
pub enum SmallEnum {
_ => panic!("match fell through?"),
}
}
+
+ #[test]
+ #[cfg(feature = "serde")]
+ fn serialize_deserialize_test() {
+ let value = $e::A | $e::C | $e::D | $e::F | $e::E | $e::G;
+ let serialized = bincode::serialize(&value).unwrap();
+ let deserialized = bincode::deserialize::<EnumSet<$e>>(&serialized).unwrap();
+ assert_eq!(value, deserialized);
+ }
}
}
}