diff --git a/serde_test/src/de.rs b/serde_test/src/de.rs index c9bcee5b3..5113b2910 100644 --- a/serde_test/src/de.rs +++ b/serde_test/src/de.rs @@ -168,14 +168,42 @@ impl<'de, 'a> de::Deserializer<'de> for &'a mut Deserializer<'de> { self.next_token(); visitor.visit_str(variant) } + (Token::BorrowedStr(variant), Token::Unit) => { + self.next_token(); + visitor.visit_borrowed_str(variant) + } + (Token::String(variant), Token::Unit) => { + self.next_token(); + visitor.visit_string(variant.to_string()) + } (Token::Bytes(variant), Token::Unit) => { self.next_token(); visitor.visit_bytes(variant) } + (Token::BorrowedBytes(variant), Token::Unit) => { + self.next_token(); + visitor.visit_borrowed_bytes(variant) + } + (Token::ByteBuf(variant), Token::Unit) => { + self.next_token(); + visitor.visit_byte_buf(variant.to_vec()) + } + (Token::U8(variant), Token::Unit) => { + self.next_token(); + visitor.visit_u8(variant) + } + (Token::U16(variant), Token::Unit) => { + self.next_token(); + visitor.visit_u16(variant) + } (Token::U32(variant), Token::Unit) => { self.next_token(); visitor.visit_u32(variant) } + (Token::U64(variant), Token::Unit) => { + self.next_token(); + visitor.visit_u64(variant) + } (variant, Token::Unit) => unexpected!(variant), (variant, _) => { visitor.visit_map(EnumMapVisitor::new(self, variant, EnumFormat::Any)) diff --git a/test_suite/tests/test_de.rs b/test_suite/tests/test_de.rs index 03b03941c..3a41a6828 100644 --- a/test_suite/tests/test_de.rs +++ b/test_suite/tests/test_de.rs @@ -693,6 +693,46 @@ declare_tests! { Token::SeqEnd, ], } + test_struct_borrowed_keys { + Struct { a: 1, b: 2, c: 0 } => &[ + Token::Map { len: Some(3) }, + Token::BorrowedStr("a"), + Token::I32(1), + + Token::BorrowedStr("b"), + Token::I32(2), + Token::MapEnd, + ], + Struct { a: 1, b: 2, c: 0 } => &[ + Token::Struct { name: "Struct", len: 2 }, + Token::BorrowedStr("a"), + Token::I32(1), + + Token::BorrowedStr("b"), + Token::I32(2), + Token::StructEnd, + ], + } + test_struct_owned_keys { + Struct { a: 1, b: 2, c: 0 } => &[ + Token::Map { len: Some(3) }, + Token::String("a"), + Token::I32(1), + + Token::String("b"), + Token::I32(2), + Token::MapEnd, + ], + Struct { a: 1, b: 2, c: 0 } => &[ + Token::Struct { name: "Struct", len: 2 }, + Token::String("a"), + Token::I32(1), + + Token::String("b"), + Token::I32(2), + Token::StructEnd, + ], + } test_struct_with_skip { Struct { a: 1, b: 2, c: 0 } => &[ Token::Map { len: Some(3) },