Complete coverage of ContentRefDeserializer::deserialize_newtype_struct

This commit is contained in:
Mingun 2024-08-17 11:31:50 +05:00
parent 2dddc7796d
commit 171c6da57a
2 changed files with 15 additions and 1 deletions

View File

@ -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),
}
}

View File

@ -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]