]> git.lizzy.rs Git - enumset.git/commitdiff
Use the underlying representation of the EnumSet instead of u128 when serializing.
authorLymia Aluysia <lymia@lymiahugs.com>
Fri, 14 Dec 2018 14:17:21 +0000 (08:17 -0600)
committerLymia Aluysia <lymia@lymiahugs.com>
Fri, 14 Dec 2018 14:17:51 +0000 (08:17 -0600)
enumset/src/lib.rs

index 165b3cea7e6ad4b9e55e7fa7acbfbeda19ff8812..2d592b9e26df6232d483e6831511f7d515f79340 100644 (file)
@@ -428,16 +428,20 @@ impl <T : EnumSetType + Debug> Debug for EnumSet<T> {
 }
 
 #[cfg(feature = "serde")]
-impl <T : EnumSetType> serde::Serialize for EnumSet<T> {
+impl <T : EnumSetType> serde::Serialize for EnumSet<T>
+    where T::Repr: serde::Serialize
+{
     fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
-        serializer.serialize_u128(self.to_bits())
+        self.__enumset_underlying.serialize(serializer)
     }
 }
 
 #[cfg(feature = "serde")]
-impl <'de, T : EnumSetType> serde::Deserialize<'de> for EnumSet<T> {
+impl <'de, T : EnumSetType> serde::Deserialize<'de> for EnumSet<T>
+    where T::Repr: serde::Deserialize<'de>
+{
     fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
-        u128::deserialize(deserializer).map(EnumSet::from_bits)
+        T::Repr::deserialize(deserializer).map(|x| EnumSet { __enumset_underlying: x })
     }
 }