mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-29 07:07:57 +00:00
Convert split_with_de_lifetime to method of Parameters
This commit is contained in:
+28
-34
@@ -25,7 +25,7 @@ pub fn expand_derive_deserialize(input: &mut syn::DeriveInput) -> syn::Result<To
|
|||||||
|
|
||||||
let ident = &cont.ident;
|
let ident = &cont.ident;
|
||||||
let params = Parameters::new(&cont);
|
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 body = Stmts(deserialize_body(&cont, ¶ms));
|
||||||
let delife = params.borrowed.de_lifetime();
|
let delife = params.borrowed.de_lifetime();
|
||||||
let allow_deprecated = allow_deprecated(input);
|
let allow_deprecated = allow_deprecated(input);
|
||||||
@@ -157,6 +157,23 @@ impl Parameters {
|
|||||||
fn type_name(&self) -> String {
|
fn type_name(&self) -> String {
|
||||||
self.this_type.segments.last().unwrap().ident.to_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
|
// 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_type = ¶ms.this_type;
|
||||||
let this_value = ¶ms.this_value;
|
let this_value = ¶ms.this_value;
|
||||||
let type_name = cattrs.name().deserialize_name();
|
let type_name = cattrs.name().deserialize_name();
|
||||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||||
split_with_de_lifetime(params);
|
|
||||||
let delife = params.borrowed.de_lifetime();
|
let delife = params.borrowed.de_lifetime();
|
||||||
|
|
||||||
let expecting = format!("unit struct {}", params.type_name());
|
let expecting = format!("unit struct {}", params.type_name());
|
||||||
@@ -488,8 +504,7 @@ fn deserialize_tuple(
|
|||||||
|
|
||||||
let this_type = ¶ms.this_type;
|
let this_type = ¶ms.this_type;
|
||||||
let this_value = ¶ms.this_value;
|
let this_value = ¶ms.this_value;
|
||||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||||
split_with_de_lifetime(params);
|
|
||||||
let delife = params.borrowed.de_lifetime();
|
let delife = params.borrowed.de_lifetime();
|
||||||
|
|
||||||
// If there are getters (implying private fields), construct the local type
|
// If there are getters (implying private fields), construct the local type
|
||||||
@@ -610,8 +625,7 @@ fn deserialize_tuple_in_place(
|
|||||||
.count();
|
.count();
|
||||||
|
|
||||||
let this_type = ¶ms.this_type;
|
let this_type = ¶ms.this_type;
|
||||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||||
split_with_de_lifetime(params);
|
|
||||||
let delife = params.borrowed.de_lifetime();
|
let delife = params.borrowed.de_lifetime();
|
||||||
|
|
||||||
let expecting = format!("tuple struct {}", params.type_name());
|
let expecting = format!("tuple struct {}", params.type_name());
|
||||||
@@ -952,8 +966,7 @@ fn deserialize_struct(
|
|||||||
) -> Fragment {
|
) -> Fragment {
|
||||||
let this_type = ¶ms.this_type;
|
let this_type = ¶ms.this_type;
|
||||||
let this_value = ¶ms.this_value;
|
let this_value = ¶ms.this_value;
|
||||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||||
split_with_de_lifetime(params);
|
|
||||||
let delife = params.borrowed.de_lifetime();
|
let delife = params.borrowed.de_lifetime();
|
||||||
|
|
||||||
// If there are getters (implying private fields), construct the local type
|
// 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 this_type = ¶ms.this_type;
|
||||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||||
split_with_de_lifetime(params);
|
|
||||||
let delife = params.borrowed.de_lifetime();
|
let delife = params.borrowed.de_lifetime();
|
||||||
|
|
||||||
let expecting = format!("struct {}", params.type_name());
|
let expecting = format!("struct {}", params.type_name());
|
||||||
@@ -1308,8 +1320,7 @@ fn deserialize_externally_tagged_enum(
|
|||||||
cattrs: &attr::Container,
|
cattrs: &attr::Container,
|
||||||
) -> Fragment {
|
) -> Fragment {
|
||||||
let this_type = ¶ms.this_type;
|
let this_type = ¶ms.this_type;
|
||||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||||
split_with_de_lifetime(params);
|
|
||||||
let delife = params.borrowed.de_lifetime();
|
let delife = params.borrowed.de_lifetime();
|
||||||
|
|
||||||
let type_name = cattrs.name().deserialize_name();
|
let type_name = cattrs.name().deserialize_name();
|
||||||
@@ -1454,8 +1465,7 @@ fn deserialize_adjacently_tagged_enum(
|
|||||||
) -> Fragment {
|
) -> Fragment {
|
||||||
let this_type = ¶ms.this_type;
|
let this_type = ¶ms.this_type;
|
||||||
let this_value = ¶ms.this_value;
|
let this_value = ¶ms.this_value;
|
||||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||||
split_with_de_lifetime(params);
|
|
||||||
let delife = params.borrowed.de_lifetime();
|
let delife = params.borrowed.de_lifetime();
|
||||||
|
|
||||||
let (variants_stmt, variant_visitor) = prepare_enum_variant_enum(variants);
|
let (variants_stmt, variant_visitor) = prepare_enum_variant_enum(variants);
|
||||||
@@ -2182,8 +2192,7 @@ fn deserialize_custom_identifier(
|
|||||||
Some(fields)
|
Some(fields)
|
||||||
};
|
};
|
||||||
|
|
||||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||||
split_with_de_lifetime(params);
|
|
||||||
let delife = params.borrowed.de_lifetime();
|
let delife = params.borrowed.de_lifetime();
|
||||||
let visitor_impl = Stmts(deserialize_identifier(
|
let visitor_impl = Stmts(deserialize_identifier(
|
||||||
&this_value,
|
&this_value,
|
||||||
@@ -2861,7 +2870,7 @@ fn deserialize_map_in_place(
|
|||||||
});
|
});
|
||||||
|
|
||||||
let this_type = ¶ms.this_type;
|
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() {
|
let let_default = match cattrs.default() {
|
||||||
attr::Default::Default => Some(quote!(
|
attr::Default::Default => Some(quote!(
|
||||||
@@ -2906,8 +2915,7 @@ fn wrap_deserialize_with(
|
|||||||
deserialize_with: &syn::ExprPath,
|
deserialize_with: &syn::ExprPath,
|
||||||
) -> (TokenStream, TokenStream) {
|
) -> (TokenStream, TokenStream) {
|
||||||
let this_type = ¶ms.this_type;
|
let this_type = ¶ms.this_type;
|
||||||
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) =
|
let (de_impl_generics, de_ty_generics, ty_generics, where_clause) = params.generics();
|
||||||
split_with_de_lifetime(params);
|
|
||||||
let delife = params.borrowed.de_lifetime();
|
let delife = params.borrowed.de_lifetime();
|
||||||
let deserializer_var = quote!(__deserializer);
|
let deserializer_var = quote!(__deserializer);
|
||||||
|
|
||||||
@@ -3227,17 +3235,3 @@ fn place_lifetime() -> syn::LifetimeParam {
|
|||||||
bounds: Punctuated::new(),
|
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)
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user