Improve "expecting" message of adjacently tagged enum variant
This commit is contained in:
parent
9bd52ec5c1
commit
ef4f860384
@ -2841,13 +2841,13 @@ fn flat_map_take_entry<'de>(
|
||||
}
|
||||
|
||||
pub struct AdjacentlyTaggedEnumVariantSeed<F> {
|
||||
pub tag: &'static str,
|
||||
pub enum_name: &'static str,
|
||||
pub variants: &'static [&'static str],
|
||||
pub fields_enum: PhantomData<F>,
|
||||
}
|
||||
|
||||
pub struct AdjacentlyTaggedEnumVariantVisitor<F> {
|
||||
tag: &'static str,
|
||||
enum_name: &'static str,
|
||||
fields_enum: PhantomData<F>,
|
||||
}
|
||||
|
||||
@ -2858,7 +2858,7 @@ where
|
||||
type Value = F;
|
||||
|
||||
fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(formatter, "enum {}", self.tag)
|
||||
write!(formatter, "variant of enum {}", self.enum_name)
|
||||
}
|
||||
|
||||
fn visit_enum<A>(self, data: A) -> Result<Self::Value, A::Error>
|
||||
@ -2882,10 +2882,10 @@ where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
deserializer.deserialize_enum(
|
||||
self.tag,
|
||||
self.enum_name,
|
||||
self.variants,
|
||||
AdjacentlyTaggedEnumVariantVisitor {
|
||||
tag: self.tag,
|
||||
enum_name: self.enum_name,
|
||||
fields_enum: PhantomData,
|
||||
},
|
||||
)
|
||||
|
@ -1357,7 +1357,7 @@ where
|
||||
}
|
||||
|
||||
pub struct AdjacentlyTaggedEnumVariant {
|
||||
pub tag: &'static str,
|
||||
pub enum_name: &'static str,
|
||||
pub variant_index: u32,
|
||||
pub variant_name: &'static str,
|
||||
}
|
||||
@ -1367,6 +1367,6 @@ impl Serialize for AdjacentlyTaggedEnumVariant {
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
serializer.serialize_unit_variant(self.tag, self.variant_index, self.variant_name)
|
||||
serializer.serialize_unit_variant(self.enum_name, self.variant_index, self.variant_name)
|
||||
}
|
||||
}
|
||||
|
@ -1460,7 +1460,8 @@ fn deserialize_adjacently_tagged_enum(
|
||||
})
|
||||
.collect();
|
||||
|
||||
let expecting = format!("adjacently tagged enum {}", params.type_name());
|
||||
let rust_name = params.type_name();
|
||||
let expecting = format!("adjacently tagged enum {}", rust_name);
|
||||
let expecting = cattrs.expecting().unwrap_or(&expecting);
|
||||
let type_name = cattrs.name().deserialize_name();
|
||||
let deny_unknown_fields = cattrs.deny_unknown_fields();
|
||||
@ -1482,7 +1483,7 @@ fn deserialize_adjacently_tagged_enum(
|
||||
|
||||
let variant_seed = quote! {
|
||||
_serde::__private::de::AdjacentlyTaggedEnumVariantSeed::<__Field> {
|
||||
tag: #tag,
|
||||
enum_name: #rust_name,
|
||||
variants: &VARIANTS,
|
||||
fields_enum: _serde::__private::PhantomData
|
||||
}
|
||||
|
@ -650,7 +650,7 @@ fn serialize_adjacently_tagged_variant(
|
||||
let variant_name = variant.attrs.name().serialize_name();
|
||||
let serialize_variant = quote! {
|
||||
&_serde::__private::ser::AdjacentlyTaggedEnumVariant {
|
||||
tag: #tag,
|
||||
enum_name: #type_name,
|
||||
variant_index: #variant_index,
|
||||
variant_name: #variant_name,
|
||||
}
|
||||
|
@ -2109,7 +2109,7 @@ fn test_adjacently_tagged_enum_bytes() {
|
||||
},
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "Data",
|
||||
variant: "A",
|
||||
},
|
||||
Token::Str("c"),
|
||||
@ -2130,7 +2130,7 @@ fn test_adjacently_tagged_enum_bytes() {
|
||||
},
|
||||
Token::Bytes(b"t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "Data",
|
||||
variant: "A",
|
||||
},
|
||||
Token::Bytes(b"c"),
|
||||
@ -2174,7 +2174,7 @@ fn test_adjacently_tagged_enum_containing_flatten() {
|
||||
},
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "Data",
|
||||
variant: "A",
|
||||
},
|
||||
Token::Str("c"),
|
||||
@ -2766,7 +2766,7 @@ fn test_expecting_message_adjacently_tagged_enum() {
|
||||
// Check that #[serde(expecting = "...")] doesn't affect variant identifier error message
|
||||
assert_de_tokens_error::<Enum>(
|
||||
&[Token::Map { len: None }, Token::Str("tag"), Token::Unit],
|
||||
r#"invalid type: unit value, expected enum tag"#,
|
||||
r#"invalid type: unit value, expected variant of enum Enum"#,
|
||||
);
|
||||
}
|
||||
|
||||
@ -3002,7 +3002,7 @@ mod flatten {
|
||||
Token::U32(42),
|
||||
Token::Str("tag"),
|
||||
Token::UnitVariant {
|
||||
name: "tag",
|
||||
name: "Enum",
|
||||
variant: "Struct",
|
||||
},
|
||||
Token::Str("content"),
|
||||
@ -3033,7 +3033,7 @@ mod flatten {
|
||||
Token::U32(42),
|
||||
Token::Str("tag"),
|
||||
Token::UnitVariant {
|
||||
name: "tag",
|
||||
name: "Enum",
|
||||
variant: "Newtype",
|
||||
},
|
||||
Token::Str("content"),
|
||||
|
@ -473,7 +473,7 @@ fn test_adjacently_tagged_newtype_struct() {
|
||||
Token::U32(5),
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "E",
|
||||
variant: "Newtype",
|
||||
},
|
||||
Token::StructEnd,
|
||||
@ -1070,7 +1070,7 @@ fn test_adjacently_tagged_enum() {
|
||||
},
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Unit",
|
||||
},
|
||||
Token::StructEnd,
|
||||
@ -1087,7 +1087,7 @@ fn test_adjacently_tagged_enum() {
|
||||
},
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Unit",
|
||||
},
|
||||
Token::StructEnd,
|
||||
@ -1104,7 +1104,7 @@ fn test_adjacently_tagged_enum() {
|
||||
},
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Unit",
|
||||
},
|
||||
Token::Str("c"),
|
||||
@ -1125,7 +1125,7 @@ fn test_adjacently_tagged_enum() {
|
||||
Token::Unit,
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Unit",
|
||||
},
|
||||
Token::StructEnd,
|
||||
@ -1144,7 +1144,7 @@ fn test_adjacently_tagged_enum() {
|
||||
Token::Unit,
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Unit",
|
||||
},
|
||||
Token::Str("g"),
|
||||
@ -1167,7 +1167,7 @@ fn test_adjacently_tagged_enum() {
|
||||
},
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Newtype",
|
||||
},
|
||||
Token::Str("c"),
|
||||
@ -1188,7 +1188,7 @@ fn test_adjacently_tagged_enum() {
|
||||
Token::U8(1),
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Newtype",
|
||||
},
|
||||
Token::StructEnd,
|
||||
@ -1205,7 +1205,7 @@ fn test_adjacently_tagged_enum() {
|
||||
},
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Newtype",
|
||||
},
|
||||
Token::StructEnd,
|
||||
@ -1222,7 +1222,7 @@ fn test_adjacently_tagged_enum() {
|
||||
},
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Tuple",
|
||||
},
|
||||
Token::Str("c"),
|
||||
@ -1249,7 +1249,7 @@ fn test_adjacently_tagged_enum() {
|
||||
Token::TupleEnd,
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Tuple",
|
||||
},
|
||||
Token::StructEnd,
|
||||
@ -1266,7 +1266,7 @@ fn test_adjacently_tagged_enum() {
|
||||
},
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Struct",
|
||||
},
|
||||
Token::Str("c"),
|
||||
@ -1299,7 +1299,7 @@ fn test_adjacently_tagged_enum() {
|
||||
Token::StructEnd,
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Struct",
|
||||
},
|
||||
Token::StructEnd,
|
||||
@ -1318,7 +1318,7 @@ fn test_adjacently_tagged_enum() {
|
||||
Token::U8(1),
|
||||
Token::U64(0), // tag field
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Newtype",
|
||||
},
|
||||
Token::StructEnd,
|
||||
@ -1337,7 +1337,7 @@ fn test_adjacently_tagged_enum() {
|
||||
Token::U8(1),
|
||||
Token::Bytes(b"t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Newtype",
|
||||
},
|
||||
Token::StructEnd,
|
||||
@ -1362,7 +1362,7 @@ fn test_adjacently_tagged_enum_deny_unknown_fields() {
|
||||
},
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Unit",
|
||||
},
|
||||
Token::Str("c"),
|
||||
@ -1379,7 +1379,7 @@ fn test_adjacently_tagged_enum_deny_unknown_fields() {
|
||||
},
|
||||
Token::Str("t"),
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Unit",
|
||||
},
|
||||
Token::Str("c"),
|
||||
@ -1421,7 +1421,7 @@ fn test_adjacently_tagged_enum_deny_unknown_fields() {
|
||||
},
|
||||
Token::U64(0), // tag field
|
||||
Token::UnitVariant {
|
||||
name: "t",
|
||||
name: "AdjacentlyTagged",
|
||||
variant: "Unit",
|
||||
},
|
||||
Token::U64(3),
|
||||
@ -1620,7 +1620,7 @@ fn test_internally_tagged_struct_with_flattened_field() {
|
||||
Token::Str("Struct"),
|
||||
Token::Str("tag_enum"),
|
||||
Token::UnitVariant {
|
||||
name: "tag_enum",
|
||||
name: "Enum",
|
||||
variant: "A",
|
||||
},
|
||||
Token::Str("content"),
|
||||
|
Loading…
x
Reference in New Issue
Block a user