Merge pull request #1474 from jwillbold/master

Fixed #1468, flattened struct fields made structs ignore their tag
This commit is contained in:
David Tolnay
2019-02-03 15:37:44 -08:00
committed by GitHub
2 changed files with 73 additions and 19 deletions
+42
View File
@@ -1424,6 +1424,48 @@ fn test_internally_tagged_braced_struct_with_zero_fields() {
);
}
#[test]
fn test_internally_tagged_struct_with_flattened_field() {
#[derive(Debug, PartialEq, Serialize, Deserialize)]
#[serde(tag="tag_struct")]
pub struct Struct {
#[serde(flatten)]
pub flat: Enum
}
#[derive(Debug, PartialEq, Serialize, Deserialize)]
#[serde(tag="tag_enum", content="content")]
pub enum Enum {
A(u64),
}
assert_tokens(
&Struct{flat: Enum::A(0)},
&[
Token::Map { len: None },
Token::Str("tag_struct"),
Token::Str("Struct"),
Token::Str("tag_enum"),
Token::Str("A"),
Token::Str("content"),
Token::U64(0),
Token::MapEnd
]
);
assert_de_tokens(
&Struct{flat: Enum::A(0)},
&[
Token::Map { len: None },
Token::Str("tag_enum"),
Token::Str("A"),
Token::Str("content"),
Token::U64(0),
Token::MapEnd
]
);
}
#[test]
fn test_enum_in_untagged_enum() {
#[derive(Debug, PartialEq, Serialize, Deserialize)]