Skip to content

Commit

Permalink
Do not generate DeserializeSeed impl when not needed
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Mingun committed Feb 27, 2023
1 parent c739361 commit 38c130a
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion serde_derive/src/de.rs
Expand Up @@ -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)
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 38c130a

Please sign in to comment.