diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index ef7a2dee2..a703adaf7 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -712,8 +712,9 @@ fn deserialize_seq( if params.has_getter { let this_type = ¶ms.this_type; + let (_, ty_generics, _) = params.generics.split_for_impl(); result = quote! { - _serde::__private::Into::<#this_type>::into(#result) + _serde::__private::Into::<#this_type #ty_generics>::into(#result) }; } @@ -856,8 +857,9 @@ fn deserialize_newtype_struct( let mut result = quote!(#type_path(__field0)); if params.has_getter { let this_type = ¶ms.this_type; + let (_, ty_generics, _) = params.generics.split_for_impl(); result = quote! { - _serde::__private::Into::<#this_type>::into(#result) + _serde::__private::Into::<#this_type #ty_generics>::into(#result) }; } @@ -2629,8 +2631,9 @@ fn deserialize_map( let mut result = quote!(#struct_path { #(#result),* }); if params.has_getter { let this_type = ¶ms.this_type; + let (_, ty_generics, _) = params.generics.split_for_impl(); result = quote! { - _serde::__private::Into::<#this_type>::into(#result) + _serde::__private::Into::<#this_type #ty_generics>::into(#result) }; } diff --git a/test_suite/tests/test_remote.rs b/test_suite/tests/test_remote.rs index c6d276e10..d997f0f01 100644 --- a/test_suite/tests/test_remote.rs +++ b/test_suite/tests/test_remote.rs @@ -79,6 +79,13 @@ mod remote { pub value: T, } + impl StructGeneric { + #[allow(dead_code)] + pub fn get_value(&self) -> &T { + &self.value + } + } + pub enum EnumGeneric { Variant(T), } @@ -171,6 +178,13 @@ struct StructPubDef { b: remote::Unit, } +#[derive(Serialize, Deserialize)] +#[serde(remote = "remote::StructGeneric")] +struct StructGenericWithGetterDef { + #[serde(getter = "remote::StructGeneric::get_value")] + value: T, +} + #[derive(Serialize, Deserialize)] #[serde(remote = "remote::StructGeneric")] struct StructConcrete { @@ -206,3 +220,9 @@ impl From for remote::StructPriv { remote::StructPriv::new(def.a, def.b) } } + +impl From> for remote::StructGeneric { + fn from(def: StructGenericWithGetterDef) -> Self { + remote::StructGeneric { value: def.value } + } +}