@@ -15,9 +15,9 @@ use syn::{
1515 parse_macro_input, parse_quote,
1616 punctuated:: Punctuated ,
1717 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 ,
2121} ;
2222
2323struct Attrs {
@@ -168,13 +168,16 @@ fn mk_blanket_impl(attrs: &Attrs, tr: &ItemTrait) -> TokenStream {
168168 . items
169169 . iter ( )
170170 . 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 ( ) ;
172175 blanket_generics
173176 . params
174- . push ( parse_quote ! ( TraitVariantBlanketType : #variant #orig_ty_generics ) ) ;
177+ . push ( GenericParam :: Type ( blanket_bound ) ) ;
175178 let ( blanket_impl_generics, _ty, blanket_where_clause) = & blanket_generics. split_for_impl ( ) ;
176179 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
178181 {
179182 #( #items) *
180183 }
0 commit comments