diff options
author | Alex Crichton <alex@alexcrichton.com> | 2017-07-06 11:43:36 -0700 |
---|---|---|
committer | Alex Crichton <alex@alexcrichton.com> | 2017-07-06 11:43:36 -0700 |
commit | f6673dfdb3f93bacfbf0c0cab4d78bc4154eec0c (patch) | |
tree | 161ce3d1c582ef27969dca3b3c5f23de1d0d87d7 | |
parent | ad5bd8758e60fc918423bbbf3dedf04037487d62 (diff) | |
download | milf-rs-f6673dfdb3f93bacfbf0c0cab4d78bc4154eec0c.tar.gz milf-rs-f6673dfdb3f93bacfbf0c0cab4d78bc4154eec0c.zip |
One more case of handling newtype structs
-rw-r--r-- | src/de.rs | 12 | ||||
-rw-r--r-- | tests/serde.rs | 29 |
2 files changed, 40 insertions, 1 deletions
@@ -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) + }) + }), + } +} |