@@ -15,9 +15,9 @@ use syn::{
15
15
parse_macro_input, parse_quote,
16
16
punctuated:: Punctuated ,
17
17
token:: Plus ,
18
- Error , FnArg , Ident , ItemTrait , Pat , PatType , Result , ReturnType , Signature , Token , TraitBound ,
19
- TraitItem , TraitItemConst , TraitItemFn , TraitItemType , Type , TypeGenerics , TypeImplTrait ,
20
- TypeParamBound ,
18
+ Error , FnArg , GenericParam , Ident , ItemTrait , Pat , PatType , Result , ReturnType , Signature ,
19
+ Token , TraitBound , TraitItem , TraitItemConst , TraitItemFn , TraitItemType , Type , TypeGenerics ,
20
+ TypeImplTrait , TypeParam , TypeParamBound ,
21
21
} ;
22
22
23
23
struct Attrs {
@@ -168,13 +168,16 @@ fn mk_blanket_impl(attrs: &Attrs, tr: &ItemTrait) -> TokenStream {
168
168
. items
169
169
. iter ( )
170
170
. map ( |item| blanket_impl_item ( item, variant, orig_ty_generics) ) ;
171
- let mut blanket_generics = tr. generics . to_owned ( ) ;
171
+ let blanket_bound: TypeParam =
172
+ parse_quote ! ( TraitVariantBlanketType : #variant #orig_ty_generics) ;
173
+ let blanket = & blanket_bound. ident . clone ( ) ;
174
+ let mut blanket_generics = tr. generics . clone ( ) ;
172
175
blanket_generics
173
176
. params
174
- . push ( parse_quote ! ( TraitVariantBlanketType : #variant #orig_ty_generics ) ) ;
177
+ . push ( GenericParam :: Type ( blanket_bound ) ) ;
175
178
let ( blanket_impl_generics, _ty, blanket_where_clause) = & blanket_generics. split_for_impl ( ) ;
176
179
quote ! {
177
- impl #blanket_impl_generics #orig #orig_ty_generics for TraitVariantBlanketType #blanket_where_clause
180
+ impl #blanket_impl_generics #orig #orig_ty_generics for #blanket #blanket_where_clause
178
181
{
179
182
#( #items) *
180
183
}
0 commit comments