diff --git a/bon-macros/src/builder/builder_gen/builder_derives/into.rs b/bon-macros/src/builder/builder_gen/builder_derives/into.rs index 5e18c077..3e77ed86 100644 --- a/bon-macros/src/builder/builder_gen/builder_derives/into.rs +++ b/bon-macros/src/builder/builder_gen/builder_derives/into.rs @@ -41,6 +41,7 @@ impl BuilderGenCtx { let state_mod = &self.state_mod.ident; let generics_decl = &self.generics.decl_without_defaults; let generic_args = &self.generics.args; + let where_clause = &self.generics.where_clause; let builder_ident = &self.builder_type.ident; let state_var = &self.state_var; let finish_fn_ident = &self.finish_fn.ident; @@ -55,7 +56,9 @@ impl BuilderGenCtx { #(#generics_decl,)* #state_var: #state_mod::IsComplete > - ::core::convert::From<#builder_ty> for #output_ty { + ::core::convert::From<#builder_ty> for #output_ty + #where_clause + { fn from(builder: #builder_ty) -> Self { #builder_ident::#finish_fn_ident(builder) } diff --git a/bon/tests/integration/builder/attr_derive.rs b/bon/tests/integration/builder/attr_derive.rs index c8b9878a..449e15f7 100644 --- a/bon/tests/integration/builder/attr_derive.rs +++ b/bon/tests/integration/builder/attr_derive.rs @@ -148,7 +148,10 @@ mod generics { fn test_struct() { #[derive(Builder, Debug)] #[builder(derive(Clone, Debug, Into))] - struct Sut { + struct Sut + where + T: Clone, + { _arg1: T, } @@ -164,7 +167,10 @@ mod generics { #[test] fn test_function() { #[builder(derive(Clone, Debug, Into))] - fn sut(_arg1: T) -> u32 { + fn sut(_arg1: T) -> u32 + where + T: Clone, + { 99 } @@ -183,7 +189,10 @@ mod generics { struct Sut(T); #[bon] - impl Sut { + impl Sut + where + T: Clone, + { #[builder(derive(Clone, Debug, Into))] fn sut(_arg1: U) -> u32 { 99