Skip to content

Commit ef4f860

Browse files
committed
Improve "expecting" message of adjacently tagged enum variant
1 parent 9bd52ec commit ef4f860

File tree

6 files changed

+36
-35
lines changed

6 files changed

+36
-35
lines changed

serde/src/private/de.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -2841,13 +2841,13 @@ fn flat_map_take_entry<'de>(
28412841
}
28422842

28432843
pub struct AdjacentlyTaggedEnumVariantSeed<F> {
2844-
pub tag: &'static str,
2844+
pub enum_name: &'static str,
28452845
pub variants: &'static [&'static str],
28462846
pub fields_enum: PhantomData<F>,
28472847
}
28482848

28492849
pub struct AdjacentlyTaggedEnumVariantVisitor<F> {
2850-
tag: &'static str,
2850+
enum_name: &'static str,
28512851
fields_enum: PhantomData<F>,
28522852
}
28532853

@@ -2858,7 +2858,7 @@ where
28582858
type Value = F;
28592859

28602860
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
2861-
write!(formatter, "enum {}", self.tag)
2861+
write!(formatter, "variant of enum {}", self.enum_name)
28622862
}
28632863

28642864
fn visit_enum<A>(self, data: A) -> Result<Self::Value, A::Error>
@@ -2882,10 +2882,10 @@ where
28822882
D: Deserializer<'de>,
28832883
{
28842884
deserializer.deserialize_enum(
2885-
self.tag,
2885+
self.enum_name,
28862886
self.variants,
28872887
AdjacentlyTaggedEnumVariantVisitor {
2888-
tag: self.tag,
2888+
enum_name: self.enum_name,
28892889
fields_enum: PhantomData,
28902890
},
28912891
)

serde/src/private/ser.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1357,7 +1357,7 @@ where
13571357
}
13581358

13591359
pub struct AdjacentlyTaggedEnumVariant {
1360-
pub tag: &'static str,
1360+
pub enum_name: &'static str,
13611361
pub variant_index: u32,
13621362
pub variant_name: &'static str,
13631363
}
@@ -1367,6 +1367,6 @@ impl Serialize for AdjacentlyTaggedEnumVariant {
13671367
where
13681368
S: Serializer,
13691369
{
1370-
serializer.serialize_unit_variant(self.tag, self.variant_index, self.variant_name)
1370+
serializer.serialize_unit_variant(self.enum_name, self.variant_index, self.variant_name)
13711371
}
13721372
}

serde_derive/src/de.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1460,7 +1460,8 @@ fn deserialize_adjacently_tagged_enum(
14601460
})
14611461
.collect();
14621462

1463-
let expecting = format!("adjacently tagged enum {}", params.type_name());
1463+
let rust_name = params.type_name();
1464+
let expecting = format!("adjacently tagged enum {}", rust_name);
14641465
let expecting = cattrs.expecting().unwrap_or(&expecting);
14651466
let type_name = cattrs.name().deserialize_name();
14661467
let deny_unknown_fields = cattrs.deny_unknown_fields();
@@ -1482,7 +1483,7 @@ fn deserialize_adjacently_tagged_enum(
14821483

14831484
let variant_seed = quote! {
14841485
_serde::__private::de::AdjacentlyTaggedEnumVariantSeed::<__Field> {
1485-
tag: #tag,
1486+
enum_name: #rust_name,
14861487
variants: &VARIANTS,
14871488
fields_enum: _serde::__private::PhantomData
14881489
}

serde_derive/src/ser.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -650,7 +650,7 @@ fn serialize_adjacently_tagged_variant(
650650
let variant_name = variant.attrs.name().serialize_name();
651651
let serialize_variant = quote! {
652652
&_serde::__private::ser::AdjacentlyTaggedEnumVariant {
653-
tag: #tag,
653+
enum_name: #type_name,
654654
variant_index: #variant_index,
655655
variant_name: #variant_name,
656656
}

test_suite/tests/test_annotations.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -2109,7 +2109,7 @@ fn test_adjacently_tagged_enum_bytes() {
21092109
},
21102110
Token::Str("t"),
21112111
Token::UnitVariant {
2112-
name: "t",
2112+
name: "Data",
21132113
variant: "A",
21142114
},
21152115
Token::Str("c"),
@@ -2130,7 +2130,7 @@ fn test_adjacently_tagged_enum_bytes() {
21302130
},
21312131
Token::Bytes(b"t"),
21322132
Token::UnitVariant {
2133-
name: "t",
2133+
name: "Data",
21342134
variant: "A",
21352135
},
21362136
Token::Bytes(b"c"),
@@ -2174,7 +2174,7 @@ fn test_adjacently_tagged_enum_containing_flatten() {
21742174
},
21752175
Token::Str("t"),
21762176
Token::UnitVariant {
2177-
name: "t",
2177+
name: "Data",
21782178
variant: "A",
21792179
},
21802180
Token::Str("c"),
@@ -2766,7 +2766,7 @@ fn test_expecting_message_adjacently_tagged_enum() {
27662766
// Check that #[serde(expecting = "...")] doesn't affect variant identifier error message
27672767
assert_de_tokens_error::<Enum>(
27682768
&[Token::Map { len: None }, Token::Str("tag"), Token::Unit],
2769-
r#"invalid type: unit value, expected enum tag"#,
2769+
r#"invalid type: unit value, expected variant of enum Enum"#,
27702770
);
27712771
}
27722772

@@ -3002,7 +3002,7 @@ mod flatten {
30023002
Token::U32(42),
30033003
Token::Str("tag"),
30043004
Token::UnitVariant {
3005-
name: "tag",
3005+
name: "Enum",
30063006
variant: "Struct",
30073007
},
30083008
Token::Str("content"),
@@ -3033,7 +3033,7 @@ mod flatten {
30333033
Token::U32(42),
30343034
Token::Str("tag"),
30353035
Token::UnitVariant {
3036-
name: "tag",
3036+
name: "Enum",
30373037
variant: "Newtype",
30383038
},
30393039
Token::Str("content"),

test_suite/tests/test_macros.rs

+19-19
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ fn test_adjacently_tagged_newtype_struct() {
473473
Token::U32(5),
474474
Token::Str("t"),
475475
Token::UnitVariant {
476-
name: "t",
476+
name: "E",
477477
variant: "Newtype",
478478
},
479479
Token::StructEnd,
@@ -1070,7 +1070,7 @@ fn test_adjacently_tagged_enum() {
10701070
},
10711071
Token::Str("t"),
10721072
Token::UnitVariant {
1073-
name: "t",
1073+
name: "AdjacentlyTagged",
10741074
variant: "Unit",
10751075
},
10761076
Token::StructEnd,
@@ -1087,7 +1087,7 @@ fn test_adjacently_tagged_enum() {
10871087
},
10881088
Token::Str("t"),
10891089
Token::UnitVariant {
1090-
name: "t",
1090+
name: "AdjacentlyTagged",
10911091
variant: "Unit",
10921092
},
10931093
Token::StructEnd,
@@ -1104,7 +1104,7 @@ fn test_adjacently_tagged_enum() {
11041104
},
11051105
Token::Str("t"),
11061106
Token::UnitVariant {
1107-
name: "t",
1107+
name: "AdjacentlyTagged",
11081108
variant: "Unit",
11091109
},
11101110
Token::Str("c"),
@@ -1125,7 +1125,7 @@ fn test_adjacently_tagged_enum() {
11251125
Token::Unit,
11261126
Token::Str("t"),
11271127
Token::UnitVariant {
1128-
name: "t",
1128+
name: "AdjacentlyTagged",
11291129
variant: "Unit",
11301130
},
11311131
Token::StructEnd,
@@ -1144,7 +1144,7 @@ fn test_adjacently_tagged_enum() {
11441144
Token::Unit,
11451145
Token::Str("t"),
11461146
Token::UnitVariant {
1147-
name: "t",
1147+
name: "AdjacentlyTagged",
11481148
variant: "Unit",
11491149
},
11501150
Token::Str("g"),
@@ -1167,7 +1167,7 @@ fn test_adjacently_tagged_enum() {
11671167
},
11681168
Token::Str("t"),
11691169
Token::UnitVariant {
1170-
name: "t",
1170+
name: "AdjacentlyTagged",
11711171
variant: "Newtype",
11721172
},
11731173
Token::Str("c"),
@@ -1188,7 +1188,7 @@ fn test_adjacently_tagged_enum() {
11881188
Token::U8(1),
11891189
Token::Str("t"),
11901190
Token::UnitVariant {
1191-
name: "t",
1191+
name: "AdjacentlyTagged",
11921192
variant: "Newtype",
11931193
},
11941194
Token::StructEnd,
@@ -1205,7 +1205,7 @@ fn test_adjacently_tagged_enum() {
12051205
},
12061206
Token::Str("t"),
12071207
Token::UnitVariant {
1208-
name: "t",
1208+
name: "AdjacentlyTagged",
12091209
variant: "Newtype",
12101210
},
12111211
Token::StructEnd,
@@ -1222,7 +1222,7 @@ fn test_adjacently_tagged_enum() {
12221222
},
12231223
Token::Str("t"),
12241224
Token::UnitVariant {
1225-
name: "t",
1225+
name: "AdjacentlyTagged",
12261226
variant: "Tuple",
12271227
},
12281228
Token::Str("c"),
@@ -1249,7 +1249,7 @@ fn test_adjacently_tagged_enum() {
12491249
Token::TupleEnd,
12501250
Token::Str("t"),
12511251
Token::UnitVariant {
1252-
name: "t",
1252+
name: "AdjacentlyTagged",
12531253
variant: "Tuple",
12541254
},
12551255
Token::StructEnd,
@@ -1266,7 +1266,7 @@ fn test_adjacently_tagged_enum() {
12661266
},
12671267
Token::Str("t"),
12681268
Token::UnitVariant {
1269-
name: "t",
1269+
name: "AdjacentlyTagged",
12701270
variant: "Struct",
12711271
},
12721272
Token::Str("c"),
@@ -1299,7 +1299,7 @@ fn test_adjacently_tagged_enum() {
12991299
Token::StructEnd,
13001300
Token::Str("t"),
13011301
Token::UnitVariant {
1302-
name: "t",
1302+
name: "AdjacentlyTagged",
13031303
variant: "Struct",
13041304
},
13051305
Token::StructEnd,
@@ -1318,7 +1318,7 @@ fn test_adjacently_tagged_enum() {
13181318
Token::U8(1),
13191319
Token::U64(0), // tag field
13201320
Token::UnitVariant {
1321-
name: "t",
1321+
name: "AdjacentlyTagged",
13221322
variant: "Newtype",
13231323
},
13241324
Token::StructEnd,
@@ -1337,7 +1337,7 @@ fn test_adjacently_tagged_enum() {
13371337
Token::U8(1),
13381338
Token::Bytes(b"t"),
13391339
Token::UnitVariant {
1340-
name: "t",
1340+
name: "AdjacentlyTagged",
13411341
variant: "Newtype",
13421342
},
13431343
Token::StructEnd,
@@ -1362,7 +1362,7 @@ fn test_adjacently_tagged_enum_deny_unknown_fields() {
13621362
},
13631363
Token::Str("t"),
13641364
Token::UnitVariant {
1365-
name: "t",
1365+
name: "AdjacentlyTagged",
13661366
variant: "Unit",
13671367
},
13681368
Token::Str("c"),
@@ -1379,7 +1379,7 @@ fn test_adjacently_tagged_enum_deny_unknown_fields() {
13791379
},
13801380
Token::Str("t"),
13811381
Token::UnitVariant {
1382-
name: "t",
1382+
name: "AdjacentlyTagged",
13831383
variant: "Unit",
13841384
},
13851385
Token::Str("c"),
@@ -1421,7 +1421,7 @@ fn test_adjacently_tagged_enum_deny_unknown_fields() {
14211421
},
14221422
Token::U64(0), // tag field
14231423
Token::UnitVariant {
1424-
name: "t",
1424+
name: "AdjacentlyTagged",
14251425
variant: "Unit",
14261426
},
14271427
Token::U64(3),
@@ -1620,7 +1620,7 @@ fn test_internally_tagged_struct_with_flattened_field() {
16201620
Token::Str("Struct"),
16211621
Token::Str("tag_enum"),
16221622
Token::UnitVariant {
1623-
name: "tag_enum",
1623+
name: "Enum",
16241624
variant: "A",
16251625
},
16261626
Token::Str("content"),

0 commit comments

Comments
 (0)