Omit missing content match if not needed

This commit is contained in:
David Tolnay
2020-05-09 20:55:55 -07:00
parent 9476838264
commit 9433004307
+15 -11
View File
@@ -1377,8 +1377,11 @@ fn deserialize_adjacently_tagged_enum(
} }
}; };
let mut missing_content = quote! {
_serde::export::Err(<__A::Error as _serde::de::Error>::missing_field(#content))
};
let mut missing_content_fallthrough = quote!(); let mut missing_content_fallthrough = quote!();
let missing_content_arms = variants let mut missing_content_arms = variants
.iter() .iter()
.enumerate() .enumerate()
.filter(|&(_, variant)| !variant.attrs.skip_deserializing()) .filter(|&(_, variant)| !variant.attrs.skip_deserializing())
@@ -1398,22 +1401,23 @@ fn deserialize_adjacently_tagged_enum(
} }
} }
_ => { _ => {
missing_content_fallthrough = quote! { missing_content_fallthrough = quote!(_ => #missing_content);
_ => _serde::export::Err(<__A::Error as _serde::de::Error>::missing_field(#content))
};
return None; return None;
} }
}; };
Some(quote! { Some(quote! {
__Field::#variant_index => #arm, __Field::#variant_index => #arm,
}) })
}); })
let missing_content = quote! { .peekable();
match __field { if missing_content_arms.peek().is_some() {
#(#missing_content_arms)* missing_content = quote! {
#missing_content_fallthrough match __field {
} #(#missing_content_arms)*
}; #missing_content_fallthrough
}
};
}
// Advance the map by one key, returning early in case of error. // Advance the map by one key, returning early in case of error.
let next_key = quote! { let next_key = quote! {