Struct deserialization from array Value

This commit is contained in:
David Tolnay 2018-04-16 22:36:49 -07:00
parent aab9ebf788
commit a66a00b0f6
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82
2 changed files with 14 additions and 2 deletions

View File

@ -511,7 +511,11 @@ impl<'de> serde::Deserializer<'de> for Value {
where
V: Visitor<'de>,
{
self.deserialize_map(visitor)
match self {
Value::Array(v) => visit_array(v, visitor),
Value::Object(v) => visit_object(v, visitor),
_ => Err(self.invalid_type(&visitor)),
}
}
fn deserialize_identifier<V>(
@ -1044,7 +1048,11 @@ impl<'de> serde::Deserializer<'de> for &'de Value {
where
V: Visitor<'de>,
{
self.deserialize_map(visitor)
match *self {
Value::Array(ref v) => visit_array_ref(v, visitor),
Value::Object(ref v) => visit_object_ref(v, visitor),
_ => Err(self.invalid_type(&visitor)),
}
}
fn deserialize_identifier<V>(

View File

@ -1179,6 +1179,10 @@ fn test_parse_struct() {
],
}
);
let j = json!([null, 2, []]);
Inner::deserialize(&j).unwrap();
Inner::deserialize(j).unwrap();
}
#[test]