Fix indexing bug when skip and other are combined

This commit is contained in:
David Tolnay
2020-05-08 15:39:07 -07:00
parent f44402e224
commit 63809e69c7
+6 -3
View File
@@ -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);