aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/de.rs12
-rw-r--r--tests/serde.rs29
2 files changed, 40 insertions, 1 deletions
diff --git a/src/de.rs b/src/de.rs
index 77b5ee5..9ff09f7 100644
--- a/src/de.rs
+++ b/src/de.rs
@@ -438,9 +438,19 @@ impl<'de, 'b> de::Deserializer<'de> for MapVisitor<'de, 'b> {
visitor.visit_some(self)
}
+ fn deserialize_newtype_struct<V>(
+ self,
+ _name: &'static str,
+ visitor: V
+ ) -> Result<V::Value, Error>
+ where V: de::Visitor<'de>
+ {
+ visitor.visit_newtype_struct(self)
+ }
+
forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string seq
- bytes byte_buf map struct unit newtype_struct identifier
+ bytes byte_buf map struct unit identifier
ignored_any unit_struct tuple_struct tuple enum
}
}
diff --git a/tests/serde.rs b/tests/serde.rs
index 3ae2bbd..c61edf5 100644
--- a/tests/serde.rs
+++ b/tests/serde.rs
@@ -525,3 +525,32 @@ fn newtypes() {
Table(map! { b: Integer(2) }),
}
}
+
+#[test]
+fn newtypes2() {
+ #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
+ struct A {
+ b: B
+ }
+
+ #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
+ struct B(Option<C>);
+
+ #[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
+ struct C {
+ x: u32,
+ y: u32,
+ z: u32
+ }
+
+ equivalent! {
+ A { b: B(Some(C { x: 0, y: 1, z: 2 })) },
+ Table(map! {
+ b: Table(map! {
+ x: Integer(0),
+ y: Integer(1),
+ z: Integer(2)
+ })
+ }),
+ }
+}