Extract duplicated code into a function

This commit is contained in:
Mingun
2020-10-12 00:23:45 +05:00
committed by Mingun
parent 1d11f03449
commit ab6588ef74
+11 -18
View File
@@ -3084,16 +3084,17 @@ struct DeTypeGenerics<'a>(&'a Parameters);
#[cfg(feature = "deserialize_in_place")] #[cfg(feature = "deserialize_in_place")]
struct InPlaceTypeGenerics<'a>(&'a Parameters); struct InPlaceTypeGenerics<'a>(&'a Parameters);
impl<'a> ToTokens for DeTypeGenerics<'a> { /// If `'de` lifetime is defined, prepends it to list of generics
fn to_tokens(&self, tokens: &mut TokenStream) { /// and then produces tokens for declaration generics on type
let mut generics = self.0.generics.clone(); fn to_tokens(mut generics: syn::Generics, borrowed: &BorrowedLifetimes, tokens: &mut TokenStream) {
if self.0.borrowed.de_lifetime_param().is_some() { if borrowed.de_lifetime_param().is_some() {
let def = syn::LifetimeParam { let def = syn::LifetimeParam {
attrs: Vec::new(), attrs: Vec::new(),
lifetime: syn::Lifetime::new("'de", Span::call_site()), lifetime: syn::Lifetime::new("'de", Span::call_site()),
colon_token: None, colon_token: None,
bounds: Punctuated::new(), bounds: Punctuated::new(),
}; };
// Prepend 'de lifetime to list of generics
generics.params = Some(syn::GenericParam::Lifetime(def)) generics.params = Some(syn::GenericParam::Lifetime(def))
.into_iter() .into_iter()
.chain(generics.params) .chain(generics.params)
@@ -3101,6 +3102,11 @@ impl<'a> ToTokens for DeTypeGenerics<'a> {
} }
let (_, ty_generics, _) = generics.split_for_impl(); let (_, ty_generics, _) = generics.split_for_impl();
ty_generics.to_tokens(tokens); ty_generics.to_tokens(tokens);
}
impl<'a> ToTokens for DeTypeGenerics<'a> {
fn to_tokens(&self, tokens: &mut TokenStream) {
to_tokens(self.0.generics.clone(), &self.0.borrowed, tokens);
} }
} }
@@ -3113,20 +3119,7 @@ impl<'a> ToTokens for InPlaceTypeGenerics<'a> {
.chain(generics.params) .chain(generics.params)
.collect(); .collect();
if self.0.borrowed.de_lifetime_param().is_some() { to_tokens(generics, &self.0.borrowed, tokens);
let def = syn::LifetimeParam {
attrs: Vec::new(),
lifetime: syn::Lifetime::new("'de", Span::call_site()),
colon_token: None,
bounds: Punctuated::new(),
};
generics.params = Some(syn::GenericParam::Lifetime(def))
.into_iter()
.chain(generics.params)
.collect();
}
let (_, ty_generics, _) = generics.split_for_impl();
ty_generics.to_tokens(tokens);
} }
} }