From 38c130a30350401a0211e519bc7b06ae3df49ccd Mon Sep 17 00:00:00 2001 From: Mingun Date: Mon, 27 Feb 2023 21:08:30 +0500 Subject: [PATCH] Do not generate `DeserializeSeed` impl when not needed This function is called for untagged, internally and externally tagged enums, but `deserializer` parameter is `None` only for the latest. Only when it's `None` `DeserializeSeed` impl is used --- serde_derive/src/de.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index f9d23926c..c0701625f 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -954,6 +954,7 @@ fn deserialize_struct( lifetime: _serde::__private::PhantomData, } }; + let need_seed = deserializer.is_none(); let dispatch = if let Some(deserializer) = deserializer { quote! { _serde::Deserializer::deserialize_any(#deserializer, #visitor_expr) @@ -999,7 +1000,7 @@ fn deserialize_struct( _ => None, }; - let visitor_seed = if is_enum && cattrs.has_flatten() { + let visitor_seed = if need_seed && is_enum && cattrs.has_flatten() { Some(quote! { impl #de_impl_generics _serde::de::DeserializeSeed<#delife> for __Visitor #de_ty_generics #where_clause { type Value = #this_type #ty_generics;