mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-13 11:21:01 +00:00
Merge pull request #2330 from dtolnay/remote
Fix generated Into conversion involving generic remote derive with getter
This commit is contained in:
@@ -712,8 +712,9 @@ fn deserialize_seq(
|
|||||||
|
|
||||||
if params.has_getter {
|
if params.has_getter {
|
||||||
let this_type = ¶ms.this_type;
|
let this_type = ¶ms.this_type;
|
||||||
|
let (_, ty_generics, _) = params.generics.split_for_impl();
|
||||||
result = quote! {
|
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));
|
let mut result = quote!(#type_path(__field0));
|
||||||
if params.has_getter {
|
if params.has_getter {
|
||||||
let this_type = ¶ms.this_type;
|
let this_type = ¶ms.this_type;
|
||||||
|
let (_, ty_generics, _) = params.generics.split_for_impl();
|
||||||
result = quote! {
|
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),* });
|
let mut result = quote!(#struct_path { #(#result),* });
|
||||||
if params.has_getter {
|
if params.has_getter {
|
||||||
let this_type = ¶ms.this_type;
|
let this_type = ¶ms.this_type;
|
||||||
|
let (_, ty_generics, _) = params.generics.split_for_impl();
|
||||||
result = quote! {
|
result = quote! {
|
||||||
_serde::__private::Into::<#this_type>::into(#result)
|
_serde::__private::Into::<#this_type #ty_generics>::into(#result)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -79,6 +79,13 @@ mod remote {
|
|||||||
pub value: T,
|
pub value: T,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T> StructGeneric<T> {
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub fn get_value(&self) -> &T {
|
||||||
|
&self.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub enum EnumGeneric<T> {
|
pub enum EnumGeneric<T> {
|
||||||
Variant(T),
|
Variant(T),
|
||||||
}
|
}
|
||||||
@@ -171,6 +178,13 @@ struct StructPubDef {
|
|||||||
b: remote::Unit,
|
b: remote::Unit,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
#[serde(remote = "remote::StructGeneric")]
|
||||||
|
struct StructGenericWithGetterDef<T> {
|
||||||
|
#[serde(getter = "remote::StructGeneric::get_value")]
|
||||||
|
value: T,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
#[serde(remote = "remote::StructGeneric<u8>")]
|
#[serde(remote = "remote::StructGeneric<u8>")]
|
||||||
struct StructConcrete {
|
struct StructConcrete {
|
||||||
@@ -206,3 +220,9 @@ impl From<StructPrivDef> for remote::StructPriv {
|
|||||||
remote::StructPriv::new(def.a, def.b)
|
remote::StructPriv::new(def.a, def.b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T> From<StructGenericWithGetterDef<T>> for remote::StructGeneric<T> {
|
||||||
|
fn from(def: StructGenericWithGetterDef<T>) -> Self {
|
||||||
|
remote::StructGeneric { value: def.value }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user