@@ -628,7 +628,7 @@ fn generate_impl(
628628 let mut where_clause = where_clause. map ( Cow :: Borrowed ) ;
629629 derive_where. where_clause ( & mut where_clause, trait_, item) ;
630630
631- let body = generate_body ( & derive_where. traits , trait_, item) ;
631+ let body = generate_body ( derive_where , & derive_where. traits , trait_, item) ;
632632
633633 let ident = item. ident ( ) ;
634634 let path = trait_. impl_path ( trait_) ;
@@ -654,19 +654,26 @@ fn generate_impl(
654654}
655655
656656/// Generate implementation method body for a [`Trait`].
657- fn generate_body ( traits : & [ DeriveTrait ] , trait_ : & DeriveTrait , item : & Item ) -> TokenStream {
657+ fn generate_body (
658+ derive_where : & DeriveWhere ,
659+ traits : & [ DeriveTrait ] ,
660+ trait_ : & DeriveTrait ,
661+ item : & Item ,
662+ ) -> TokenStream {
663+ let any_bound = !derive_where. generics . is_empty ( ) ;
664+
658665 match & item {
659666 Item :: Item ( data) => {
660- let body = trait_. build_body ( traits, trait_, data) ;
661- trait_. build_signature ( item, traits, trait_, & body)
667+ let body = trait_. build_body ( any_bound , traits, trait_, data) ;
668+ trait_. build_signature ( any_bound , item, traits, trait_, & body)
662669 }
663670 Item :: Enum { variants, .. } => {
664671 let body: TokenStream = variants
665672 . iter ( )
666- . map ( |data| trait_. build_body ( traits, trait_, data) )
673+ . map ( |data| trait_. build_body ( any_bound , traits, trait_, data) )
667674 . collect ( ) ;
668675
669- trait_. build_signature ( item, traits, trait_, & body)
676+ trait_. build_signature ( any_bound , item, traits, trait_, & body)
670677 }
671678 }
672679}
0 commit comments