]> git.lizzy.rs Git - enumset.git/commitdiff
Ignore unknown variants when deserializing enums.
authorLymia Aluysia <lymia@lymiahugs.com>
Thu, 2 May 2019 05:23:10 +0000 (00:23 -0500)
committerLymia Aluysia <lymia@lymiahugs.com>
Thu, 2 May 2019 05:23:10 +0000 (00:23 -0500)
enumset/src/lib.rs
enumset_derive/src/lib.rs

index 710ae260a485948a6bddef9233f4c61f44a05196..873a46c18e41e2fcba6b9160469e52f83c46998b 100644 (file)
@@ -754,6 +754,14 @@ mod test {
                     let deserialized = bincode::deserialize::<EnumSet<$e>>(&serialized).unwrap();
                     assert_eq!(value, deserialized);
                 }
+
+                #[test]
+                #[cfg(feature = "serde")]
+                fn deserialize_all_test() {
+                    let serialized = bincode::serialize(&(!0 as <$e as EnumSetType>::Repr)).unwrap();
+                    let deserialized = bincode::deserialize::<EnumSet<$e>>(&serialized).unwrap();
+                    assert_eq!(EnumSet::<$e>::all(), deserialized);
+                }
             }
         }
     }
index 5f63479fe0fedd42bfb12c6469c2c9d33e16051f..828e7384712423bf8580c0ff656463dcc0a0383d 100644 (file)
@@ -165,7 +165,8 @@ fn enum_set_type_impl(
             ) -> #core::result::Result<::enumset::EnumSet<#name>, D::Error> {
                 use #serde::Deserialize;
                 #core::prelude::v1::Ok(::enumset::EnumSet {
-                    __enumset_underlying: <#name as ::enumset::EnumSetType>::Repr::deserialize(de)?,
+                    __enumset_underlying:
+                        <#name as ::enumset::EnumSetType>::Repr::deserialize(de)? & #all_variants,
                 })
             }
         }