fix: don't check skipped variant with internal tag
This commit is contained in:
parent
f52d134c14
commit
983347484e
@ -267,8 +267,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();
|
||||
|
||||
|
@ -2265,6 +2265,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)]
|
||||
|
Loading…
x
Reference in New Issue
Block a user