One more case of handling newtype structs

This commit is contained in:
Alex Crichton 2017-07-06 11:43:36 -07:00
parent 7a8c535c5a
commit 66bbdb36a6
2 changed files with 40 additions and 1 deletions

View file

@ -438,9 +438,19 @@ impl<'de, 'b> de::Deserializer<'de> for MapVisitor<'de, 'b> {
visitor.visit_some(self) 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! { forward_to_deserialize_any! {
bool u8 u16 u32 u64 i8 i16 i32 i64 f32 f64 char str string seq 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 ignored_any unit_struct tuple_struct tuple enum
} }
} }

View file

@ -525,3 +525,32 @@ fn newtypes() {
Table(map! { b: Integer(2) }), 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)
})
}),
}
}