From 94768382645e2eeefb3f024817b54b46b51c9e3c Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 9 May 2020 20:55:18 -0700 Subject: [PATCH] Omit missing content fallthrough arm if not needed --- serde_derive/src/de.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 3f4704c2..a4e15b55 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -1377,7 +1377,8 @@ fn deserialize_adjacently_tagged_enum( } }; - let arms = variants + let mut missing_content_fallthrough = quote!(); + let missing_content_arms = variants .iter() .enumerate() .filter(|&(_, variant)| !variant.attrs.skip_deserializing()) @@ -1396,7 +1397,12 @@ fn deserialize_adjacently_tagged_enum( #func(#content).map(#this::#variant_ident) } } - _ => return None, + _ => { + missing_content_fallthrough = quote! { + _ => _serde::export::Err(<__A::Error as _serde::de::Error>::missing_field(#content)) + }; + return None; + } }; Some(quote! { __Field::#variant_index => #arm, @@ -1404,8 +1410,8 @@ fn deserialize_adjacently_tagged_enum( }); let missing_content = quote! { match __field { - #(#arms)* - _ => _serde::export::Err(<__A::Error as _serde::de::Error>::missing_field(#content)) + #(#missing_content_arms)* + #missing_content_fallthrough } };