mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-13 19:31:02 +00:00
Fix indexing bug when skip and other are combined
This commit is contained in:
@@ -1153,10 +1153,13 @@ fn prepare_enum_variant_enum(
|
|||||||
variants: &[Variant],
|
variants: &[Variant],
|
||||||
cattrs: &attr::Container,
|
cattrs: &attr::Container,
|
||||||
) -> (TokenStream, Stmts) {
|
) -> (TokenStream, Stmts) {
|
||||||
let variant_names_idents: Vec<_> = variants
|
let mut deserialized_variants = variants
|
||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.filter(|&(_, variant)| !variant.attrs.skip_deserializing())
|
.filter(|&(_, variant)| !variant.attrs.skip_deserializing());
|
||||||
|
|
||||||
|
let variant_names_idents: Vec<_> = deserialized_variants
|
||||||
|
.clone()
|
||||||
.map(|(i, variant)| {
|
.map(|(i, variant)| {
|
||||||
(
|
(
|
||||||
variant.attrs.name().deserialize_name(),
|
variant.attrs.name().deserialize_name(),
|
||||||
@@ -1166,7 +1169,7 @@ fn prepare_enum_variant_enum(
|
|||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let other_idx = variants.iter().position(|variant| variant.attrs.other());
|
let other_idx = deserialized_variants.position(|(_, variant)| variant.attrs.other());
|
||||||
|
|
||||||
let variants_stmt = {
|
let variants_stmt = {
|
||||||
let variant_names = variant_names_idents.iter().map(|(name, _, _)| name);
|
let variant_names = variant_names_idents.iter().map(|(name, _, _)| name);
|
||||||
|
|||||||
Reference in New Issue
Block a user