mirror of
https://github.com/serde-rs/serde.git
synced 2025-09-27 04:50:36 +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
|
||||
V: Visitor<'de>,
|
||||
{
|
||||
// Covered by tests/test_enum_untagged.rs
|
||||
// newtype_struct
|
||||
match *self.content {
|
||||
Content::Newtype(ref 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),
|
||||
}
|
||||
}
|
||||
|
@ -104,6 +104,7 @@ fn newtype_unit_and_empty_map() {
|
||||
);
|
||||
}
|
||||
|
||||
// Reaches crate::private::de::content::ContentRefDeserializer::deserialize_newtype_struct
|
||||
#[test]
|
||||
fn newtype_struct() {
|
||||
#[derive(Debug, PartialEq, Serialize, Deserialize)]
|
||||
@ -116,8 +117,11 @@ fn newtype_struct() {
|
||||
Null,
|
||||
}
|
||||
|
||||
let value = E::Newtype(NewtypeStruct(5));
|
||||
|
||||
// Content::Newtype case
|
||||
assert_tokens(
|
||||
&E::Newtype(NewtypeStruct(5)),
|
||||
&value,
|
||||
&[
|
||||
Token::NewtypeStruct {
|
||||
name: "NewtypeStruct",
|
||||
@ -125,6 +129,9 @@ fn newtype_struct() {
|
||||
Token::U32(5),
|
||||
],
|
||||
);
|
||||
|
||||
// _ case
|
||||
assert_de_tokens(&value, &[Token::U32(5)]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
Loading…
x
Reference in New Issue
Block a user