diff --git a/serde/src/de/value.rs b/serde/src/de/value.rs index 66bfdb2af..2f89e81dc 100644 --- a/serde/src/de/value.rs +++ b/serde/src/de/value.rs @@ -907,6 +907,26 @@ where visitor.visit_seq(self.seq) } + fn deserialize_unit(self, visitor: V) -> Result + where + V: de::Visitor<'de>, + { + // See test_internally_tagged_newtype_variant_containing_unit_struct + visitor.visit_unit() + } + + fn deserialize_unit_struct( + self, + _name: &'static str, + visitor: V, + ) -> Result + where + V: de::Visitor<'de>, + { + // See test_internally_tagged_newtype_variant_containing_unit_struct + visitor.visit_unit() + } + fn deserialize_newtype_struct( self, _name: &str, @@ -920,7 +940,7 @@ where forward_to_deserialize_any! { bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string - bytes byte_buf option unit unit_struct seq tuple + bytes byte_buf option seq tuple tuple_struct map struct enum identifier ignored_any } @@ -1366,6 +1386,26 @@ where visitor.visit_enum(self) } + fn deserialize_unit(self, visitor: V) -> Result + where + V: de::Visitor<'de>, + { + // See test_internally_tagged_newtype_variant_containing_unit_struct + visitor.visit_unit() + } + + fn deserialize_unit_struct( + self, + _name: &'static str, + visitor: V, + ) -> Result + where + V: de::Visitor<'de>, + { + // See test_internally_tagged_newtype_variant_containing_unit_struct + visitor.visit_unit() + } + fn deserialize_newtype_struct( self, _name: &str, @@ -1379,7 +1419,7 @@ where forward_to_deserialize_any! { bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string - bytes byte_buf option unit unit_struct seq tuple + bytes byte_buf option seq tuple tuple_struct map struct identifier ignored_any } diff --git a/test_suite/tests/test_macros.rs b/test_suite/tests/test_macros.rs index 558d03ac7..29ce601b6 100644 --- a/test_suite/tests/test_macros.rs +++ b/test_suite/tests/test_macros.rs @@ -1919,6 +1919,25 @@ fn test_internally_tagged_newtype_variant_containing_unit_struct() { Token::MapEnd, ], ); + + assert_de_tokens( + &Message::Info(Info).readable(), + &[ + Token::Struct { name: "Message", len: 1 }, + Token::Str("topic"), + Token::Str("Info"), + Token::StructEnd, + ], + ); + + assert_de_tokens( + &Message::Info(Info).readable(), + &[ + Token::Seq { len: Some(1) }, + Token::Str("Info"), + Token::SeqEnd, + ], + ); } #[deny(safe_packed_borrows)]