mirror of
https://github.com/serde-rs/serde.git
synced 2025-09-26 20:40:35 +00:00
Convert split_with_de_lifetime
to method of Parameters
This commit is contained in:
parent
4855fb467f
commit
ddb7c4b30f
@ -25,7 +25,7 @@ pub fn expand_derive_deserialize(input: &mut syn::DeriveInput) -> syn::Result<To
|
||||
|
||||
let ident = &cont.ident;
|
||||
let params = Parameters::new(&cont);
|
||||
let (de_impl_generics, _, ty_generics, where_clause) = split_with_de_lifetime(¶ms);
|
||||
let (de_impl_generics, _, ty_generics, where_clause) = params.generics();
|
||||
let body = Stmts(deserialize_body(&cont, ¶ms));
|
||||
let delife = params.borrowed.de_lifetime();
|
||||
let allow_deprecated = allow_deprecated(input);
|
||||
@ -157,6 +157,23 @@ impl Parameters {
|
||||
fn type_name(&self) -> String {
|
||||
self.this_type.segments.last().unwrap().ident.to_string()
|
||||
}
|
||||
|
||||
/// Split a deserialized type's generics into the pieces required for impl'ing
|
||||
/// a `Deserialize` trait for that type. Additionally appends the `'de` lifetime
|
||||
/// to list of impl generics.
|
||||
fn generics(
|
||||
&self,
|
||||
) -> (
|
||||
DeImplGenerics,
|
||||
DeTypeGenerics,
|
||||
syn::TypeGenerics,
|
||||
Option<&syn::WhereClause>,
|
||||
) {
|
||||
let de_impl_generics = DeImplGenerics(self);
|
||||
let de_ty_generics = DeTypeGenerics(self);
|
||||
let (_, ty_generics, where_clause) = self.generics.split_for_impl();
|
||||
(de_impl_generics, de_ty_generics, ty_generics, where_clause)
|
||||
}
|
||||
}
|
||||
|
||||
// All the generics in the input, plus a bound `T: Deserialize` for each generic
|
||||
@ -418,8 +435,7 @@ fn deserialize_unit_struct(params: &Parameters, cattrs: &attr::Container) -> Fra
|
||||
let this_type = ¶ms.this_type;
|
||||
let this_value = ¶ms.this_value;
|
||||
let type_name = cattrs.name().deserialize_name();
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
||||
split_with_de_lifetime(params);
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||
let delife = params.borrowed.de_lifetime();
|
||||
|
||||
let expecting = format!("unit struct {}", params.type_name());
|
||||
@ -488,8 +504,7 @@ fn deserialize_tuple(
|
||||
|
||||
let this_type = ¶ms.this_type;
|
||||
let this_value = ¶ms.this_value;
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
||||
split_with_de_lifetime(params);
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||
let delife = params.borrowed.de_lifetime();
|
||||
|
||||
// If there are getters (implying private fields), construct the local type
|
||||
@ -610,8 +625,7 @@ fn deserialize_tuple_in_place(
|
||||
.count();
|
||||
|
||||
let this_type = ¶ms.this_type;
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
||||
split_with_de_lifetime(params);
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||
let delife = params.borrowed.de_lifetime();
|
||||
|
||||
let expecting = format!("tuple struct {}", params.type_name());
|
||||
@ -952,8 +966,7 @@ fn deserialize_struct(
|
||||
) -> Fragment {
|
||||
let this_type = ¶ms.this_type;
|
||||
let this_value = ¶ms.this_value;
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
||||
split_with_de_lifetime(params);
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||
let delife = params.borrowed.de_lifetime();
|
||||
|
||||
// If there are getters (implying private fields), construct the local type
|
||||
@ -1140,8 +1153,7 @@ fn deserialize_struct_in_place(
|
||||
}
|
||||
|
||||
let this_type = ¶ms.this_type;
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
||||
split_with_de_lifetime(params);
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||
let delife = params.borrowed.de_lifetime();
|
||||
|
||||
let expecting = format!("struct {}", params.type_name());
|
||||
@ -1308,8 +1320,7 @@ fn deserialize_externally_tagged_enum(
|
||||
cattrs: &attr::Container,
|
||||
) -> Fragment {
|
||||
let this_type = ¶ms.this_type;
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
||||
split_with_de_lifetime(params);
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||
let delife = params.borrowed.de_lifetime();
|
||||
|
||||
let type_name = cattrs.name().deserialize_name();
|
||||
@ -1454,8 +1465,7 @@ fn deserialize_adjacently_tagged_enum(
|
||||
) -> Fragment {
|
||||
let this_type = ¶ms.this_type;
|
||||
let this_value = ¶ms.this_value;
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
||||
split_with_de_lifetime(params);
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||
let delife = params.borrowed.de_lifetime();
|
||||
|
||||
let (variants_stmt, variant_visitor) = prepare_enum_variant_enum(variants);
|
||||
@ -2182,8 +2192,7 @@ fn deserialize_custom_identifier(
|
||||
Some(fields)
|
||||
};
|
||||
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
||||
split_with_de_lifetime(params);
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||
let delife = params.borrowed.de_lifetime();
|
||||
let visitor_impl = Stmts(deserialize_identifier(
|
||||
&this_value,
|
||||
@ -2861,7 +2870,7 @@ fn deserialize_map_in_place(
|
||||
});
|
||||
|
||||
let this_type = ¶ms.this_type;
|
||||
let (_, _, ty_generics, _) = split_with_de_lifetime(params);
|
||||
let (_, _, ty_generics, _) = params.generics();
|
||||
|
||||
let let_default = match cattrs.default() {
|
||||
attr::Default::Default => Some(quote!(
|
||||
@ -2906,8 +2915,7 @@ fn wrap_deserialize_with(
|
||||
deserialize_with: &syn::ExprPath,
|
||||
) -> (TokenStream, TokenStream) {
|
||||
let this_type = ¶ms.this_type;
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
||||
split_with_de_lifetime(params);
|
||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||
let delife = params.borrowed.de_lifetime();
|
||||
let deserializer_var = quote!(__deserializer);
|
||||
|
||||
@ -3227,17 +3235,3 @@ fn place_lifetime() -> syn::LifetimeParam {
|
||||
bounds: Punctuated::new(),
|
||||
}
|
||||
}
|
||||
|
||||
fn split_with_de_lifetime(
|
||||
params: &Parameters,
|
||||
) -> (
|
||||
DeImplGenerics,
|
||||
DeTypeGenerics,
|
||||
syn::TypeGenerics,
|
||||
Option<&syn::WhereClause>,
|
||||
) {
|
||||
let de_impl_generics = DeImplGenerics(params);
|
||||
let de_ty_generics = DeTypeGenerics(params);
|
||||
let (_, ty_generics, where_clause) = params.generics.split_for_impl();
|
||||
(de_impl_generics, de_ty_generics, ty_generics, where_clause)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user