diff --git a/serde/src/private/de.rs b/serde/src/private/de.rs index 883e6909..c402d2c6 100644 --- a/serde/src/private/de.rs +++ b/serde/src/private/de.rs @@ -313,6 +313,8 @@ mod content { } } + /// Used to capture data in [`Content`] from other deserializers. + /// Cannot capture externally tagged enums, `i128` and `u128`. struct ContentVisitor<'de> { value: PhantomData>, } @@ -528,6 +530,8 @@ mod content { Content(Content<'de>), } + /// Serves as a seed for deserializing a key of internally tagged enum. + /// Cannot capture externally tagged enums, `i128` and `u128`. struct TagOrContentVisitor<'de> { name: &'static str, value: PhantomData>, @@ -814,6 +818,9 @@ mod content { /// Used by generated code to deserialize an internally tagged enum. /// + /// Captures map or sequence from the original deserializer and searches + /// a tag in it (in case of sequence, tag is the first element of sequence). + /// /// Not public API. pub struct TaggedContentVisitor { tag_name: &'static str, diff --git a/test_suite/tests/test_macros.rs b/test_suite/tests/test_macros.rs index 2b7d189f..b9e54301 100644 --- a/test_suite/tests/test_macros.rs +++ b/test_suite/tests/test_macros.rs @@ -997,7 +997,9 @@ fn test_internally_tagged_struct_variant_containing_unit_variant() { Token::Str("action"), Token::Str("Log"), Token::Str("level"), + Token::Enum { name: "Level" }, Token::BorrowedStr("Info"), + Token::Unit, Token::StructEnd, ], ); @@ -1009,7 +1011,9 @@ fn test_internally_tagged_struct_variant_containing_unit_variant() { Token::Str("action"), Token::Str("Log"), Token::Str("level"), + Token::Enum { name: "Level" }, Token::BorrowedStr("Info"), + Token::Unit, Token::MapEnd, ], ); @@ -1019,7 +1023,9 @@ fn test_internally_tagged_struct_variant_containing_unit_variant() { &[ Token::Seq { len: Some(2) }, Token::Str("Log"), + Token::Enum { name: "Level" }, Token::BorrowedStr("Info"), + Token::Unit, Token::SeqEnd, ], );