mirror of
https://github.com/serde-rs/serde.git
synced 2025-10-01 23:11:18 +00:00
Make most of prepare_enum_variant_enum independent of variant_names_idents item type
This commit is contained in:
parent
830309fcb5
commit
3393ad6760
@ -1225,33 +1225,33 @@ fn deserialize_homogeneous_enum(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn prepare_enum_variant_enum(variants: &[Variant]) -> (TokenStream, Stmts) {
|
fn prepare_enum_variant_enum(variants: &[Variant]) -> (TokenStream, Stmts) {
|
||||||
let mut deserialized_variants = variants
|
let deserialized_variants = variants
|
||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.filter(|&(_, variant)| !variant.attrs.skip_deserializing());
|
.filter(|&(_i, variant)| !variant.attrs.skip_deserializing());
|
||||||
|
|
||||||
let variant_names_idents: Vec<_> = deserialized_variants
|
|
||||||
.clone()
|
|
||||||
.map(|(i, variant)| (field_i(i), variant.attrs.aliases()))
|
|
||||||
.collect();
|
|
||||||
|
|
||||||
let fallthrough = deserialized_variants
|
let fallthrough = deserialized_variants
|
||||||
.position(|(_, variant)| variant.attrs.other())
|
.clone()
|
||||||
.map(|other_idx| {
|
.find(|(_i, variant)| variant.attrs.other())
|
||||||
let ignore_variant = variant_names_idents[other_idx].0.clone();
|
.map(|(i, _variant)| {
|
||||||
|
let ignore_variant = field_i(i);
|
||||||
quote!(_serde::__private::Ok(__Field::#ignore_variant))
|
quote!(_serde::__private::Ok(__Field::#ignore_variant))
|
||||||
});
|
});
|
||||||
|
|
||||||
let variants_stmt = {
|
let variants_stmt = {
|
||||||
let variant_names = variant_names_idents
|
let variant_names = deserialized_variants
|
||||||
.iter()
|
.clone()
|
||||||
.flat_map(|&(_, aliases)| aliases);
|
.flat_map(|(_i, variant)| variant.attrs.aliases());
|
||||||
quote! {
|
quote! {
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
const VARIANTS: &'static [&'static str] = &[ #(#variant_names),* ];
|
const VARIANTS: &'static [&'static str] = &[ #(#variant_names),* ];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let variant_names_idents: Vec<_> = deserialized_variants
|
||||||
|
.map(|(i, variant)| (field_i(i), variant.attrs.aliases()))
|
||||||
|
.collect();
|
||||||
|
|
||||||
let variant_visitor = Stmts(deserialize_generated_identifier(
|
let variant_visitor = Stmts(deserialize_generated_identifier(
|
||||||
&variant_names_idents,
|
&variant_names_idents,
|
||||||
false, // variant identifiers do not depend on the presence of flatten fields
|
false, // variant identifiers do not depend on the presence of flatten fields
|
||||||
|
Loading…
x
Reference in New Issue
Block a user