mirror of
https://github.com/serde-rs/serde.git
synced 2025-09-27 13:00:49 +00:00
Complete coverage of ContentRefDeserializer::deserialize_newtype_struct
This commit is contained in:
parent
2dddc7796d
commit
171c6da57a
@ -1938,10 +1938,17 @@ mod content {
|
|||||||
where
|
where
|
||||||
V: Visitor<'de>,
|
V: Visitor<'de>,
|
||||||
{
|
{
|
||||||
|
// Covered by tests/test_enum_untagged.rs
|
||||||
|
// newtype_struct
|
||||||
match *self.content {
|
match *self.content {
|
||||||
Content::Newtype(ref v) => {
|
Content::Newtype(ref v) => {
|
||||||
visitor.visit_newtype_struct(ContentRefDeserializer::new(v))
|
visitor.visit_newtype_struct(ContentRefDeserializer::new(v))
|
||||||
}
|
}
|
||||||
|
// This case is necessary for formats which does not store marker of a newtype,
|
||||||
|
// for example, JSON. When `deserialize_any` is requested from such formats, they will
|
||||||
|
// report value without using `Visitor::visit_newtype_struct`, because they do not
|
||||||
|
// known in which contexts this value will be used.
|
||||||
|
// RON is example of format which preserve markers.
|
||||||
_ => visitor.visit_newtype_struct(self),
|
_ => visitor.visit_newtype_struct(self),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,6 +104,7 @@ fn newtype_unit_and_empty_map() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reaches crate::private::de::content::ContentRefDeserializer::deserialize_newtype_struct
|
||||||
#[test]
|
#[test]
|
||||||
fn newtype_struct() {
|
fn newtype_struct() {
|
||||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||||
@ -116,8 +117,11 @@ fn newtype_struct() {
|
|||||||
Null,
|
Null,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let value = E::Newtype(NewtypeStruct(5));
|
||||||
|
|
||||||
|
// Content::Newtype case
|
||||||
assert_tokens(
|
assert_tokens(
|
||||||
&E::Newtype(NewtypeStruct(5)),
|
&value,
|
||||||
&[
|
&[
|
||||||
Token::NewtypeStruct {
|
Token::NewtypeStruct {
|
||||||
name: "NewtypeStruct",
|
name: "NewtypeStruct",
|
||||||
@ -125,6 +129,9 @@ fn newtype_struct() {
|
|||||||
Token::U32(5),
|
Token::U32(5),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// _ case
|
||||||
|
assert_de_tokens(&value, &[Token::U32(5)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user