Merge pull request #2266 from flisky/master

fix: don't check skipped variant with internal tag
This commit is contained in:
David Tolnay
2023-07-26 13:36:33 -07:00
committed by GitHub
2 changed files with 35 additions and 2 deletions
+4 -2
View File
@@ -285,8 +285,10 @@ fn check_internal_tag_field_name_conflict(cx: &Ctxt, cont: &Container) {
match variant.style {
Style::Struct => {
for field in &variant.fields {
let check_ser = !field.attrs.skip_serializing();
let check_de = !field.attrs.skip_deserializing();
let check_ser =
!(field.attrs.skip_serializing() || variant.attrs.skip_serializing());
let check_de =
!(field.attrs.skip_deserializing() || variant.attrs.skip_deserializing());
let name = field.attrs.name();
let ser_name = name.serialize_name();
+31
View File
@@ -2260,6 +2260,37 @@ fn test_externally_tagged_enum_containing_flatten() {
);
}
#[test]
fn test_internally_tagged_enum_with_skipped_conflict() {
#[derive(Serialize, Deserialize, PartialEq, Debug)]
#[serde(tag = "t")]
enum Data {
A,
#[serde(skip)]
B {
t: String
},
C {
#[serde(default, skip)]
t: String
},
}
let _data = Data::B { t: "".to_string() };
let data = Data::C { t: "".to_string() };
assert_tokens(
&data,
&[
Token::Struct { name: "Data", len: 1 },
Token::Str("t"),
Token::Str("C"),
Token::StructEnd,
],
);
}
#[test]
fn test_internally_tagged_enum_containing_flatten() {
#[derive(Serialize, Deserialize, PartialEq, Debug)]