diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 26c57c9d..747e4519 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -1868,8 +1868,11 @@ fn deserialize_internally_tagged_variant( cattrs: &attr::Container, deserializer: TokenStream, ) -> Fragment { - if variant.attrs.deserialize_with().is_some() { - return deserialize_untagged_variant(params, variant, cattrs, deserializer); + if let Some(path) = variant.attrs.deserialize_with() { + let unwrap_fn = unwrap_to_variant_closure(params, variant, false); + return quote_block! { + _serde::#private::Result::map(#path(#deserializer), #unwrap_fn) + }; } let variant_ident = &variant.ident;