@@ -60,7 +60,7 @@ pub( super ) fn handle_struct_non_zero_variant
6060 let _enum_generics_where_clause = ctx. merged_where_clause ; // Renamed for clarity, prefixed with _
6161
6262 // Create a version of enum_generics_ty *without* the trailing comma for use in type names
63- let enum_generics_ty_no_comma = enum_generics_ty_with_comma . pairs ( ) . map ( | p | p . value ( ) . clone ( ) ) . collect :: < Punctuated < _ , Comma > > ( ) ; // Corrected: Added .clone ()
63+ let enum_generics_ty_no_comma : Punctuated < GenericParam , Comma > = enum_generics_ty_with_comma . into_iter ( ) . collect ( ) ; // Use into_iter().collect ()
6464
6565
6666 // Check if the attribute is present using .is_some()
@@ -236,8 +236,8 @@ pub( super ) fn handle_struct_non_zero_variant
236236 // Generate token stream for the type within the angle brackets for FormingEnd
237237 // Construct the punctuated list for DefinitionTypes generics
238238 let mut forming_end_def_types_generics_vec : Vec < GenericParam > = inner_generics_ty_punctuated_no_comma. iter ( ) . cloned ( ) . collect ( ) ; // Use iter().cloned()
239- let context_param : GenericParam = parse_quote ! ( Context = ( ) ) ;
240- let formed_param : GenericParam = parse_quote ! ( Formed = #enum_name< #enum_generics_ty_no_comma > ) ;
239+ let context_param : GenericParam = parse_quote ! ( Context2 ) ; // Use generic parameter directly
240+ let formed_param : GenericParam = parse_quote ! ( Formed2 ) ; // Use generic parameter directly
241241 forming_end_def_types_generics_vec. push ( context_param ) ;
242242 forming_end_def_types_generics_vec. push ( formed_param ) ;
243243 let forming_end_def_types_generics = Punctuated :: < _ , Comma > :: from_iter ( forming_end_def_types_generics_vec ) ;
@@ -753,9 +753,11 @@ pub( super ) fn handle_struct_non_zero_variant
753753 where_clause_with_end_bound = quote ! { #where_clause_with_end_bound , } ;
754754 }
755755 // Construct DefinitionTypes generics list for the bound
756- let mut def_types_bound_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. iter ( ) . cloned ( ) . collect ( ) ; // Use iter().cloned()
757- def_types_bound_generics_vec. push ( context_param. clone ( ) ) ; // Clone before moving
758- def_types_bound_generics_vec. push ( formed_param. clone ( ) ) ; // Clone before moving
756+ let mut def_types_bound_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. clone ( ) . into_iter ( ) . collect ( ) ; // Use clone().into_iter()
757+ let context_param : GenericParam = parse_quote ! ( Context2 ) ; // Use generic parameter directly
758+ let formed_param : GenericParam = parse_quote ! ( Formed2 ) ; // Use generic parameter directly
759+ def_types_bound_generics_vec. push ( context_param ) ;
760+ def_types_bound_generics_vec. push ( formed_param ) ;
759761 let def_types_bound_generics = Punctuated :: < _ , Comma > :: from_iter ( def_types_bound_generics_vec ) ;
760762
761763 where_clause_with_end_bound = quote ! { #where_clause_with_end_bound End2 : former:: FormingEnd < #def_types_name< #def_types_bound_generics > > } ; // Use constructed list
@@ -781,7 +783,7 @@ pub( super ) fn handle_struct_non_zero_variant
781783 // Construct the generics for the former struct directly
782784 let mut former_generics_params_vec : Vec < GenericParam > = generics. params . iter ( ) . cloned ( ) . collect ( ) ;
783785 // Construct the Definition generic argument
784- let mut def_arg_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. iter ( ) . cloned ( ) . collect ( ) ; // Use iter ().cloned ()
786+ let mut def_arg_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. clone ( ) . into_iter ( ) . collect ( ) ; // Use clone ().into_iter ()
785787 let context_arg_param : GenericParam = parse_quote ! ( Context = ( ) ) ;
786788 let formed_arg_param : GenericParam = parse_quote ! ( Formed = #enum_name<#enum_generics_ty_no_comma> ) ;
787789 let end_arg_param : GenericParam = parse_quote ! ( End = #end_struct_name<#enum_generics_ty_no_comma> ) ;
@@ -798,7 +800,7 @@ pub( super ) fn handle_struct_non_zero_variant
798800 let mut former_where_predicates : Punctuated < syn:: WherePredicate , Comma > = Punctuated :: new ( ) ;
799801 former_where_predicates. push ( parse_quote ! { Definition : former:: FormerDefinition < Storage = #storage_struct_name< #enum_generics_ty_no_comma > > } ) ; // Use no_comma
800802 // Construct DefinitionTypes generics list for the bound
801- let mut def_types_bound_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. iter ( ) . cloned ( ) . collect ( ) ; // Use iter ().cloned ()
803+ let mut def_types_bound_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. clone ( ) . into_iter ( ) . collect ( ) ; // Use clone ().into_iter ()
802804 // let context_param_bound : GenericParam = parse_quote!( Context = () ); // Already defined
803805 // let formed_param_bound : GenericParam = parse_quote!( Formed = #enum_name< #enum_generics_ty_no_comma > ); // Already defined
804806 def_types_bound_generics_vec. push ( context_param. clone ( ) ) ;
@@ -884,6 +886,7 @@ pub( super ) fn handle_struct_non_zero_variant
884886 impl < #former_generics_impl > #former_name < #former_generics_ty_no_comma > // Use no_comma
885887 where #former_impl_where_clause // Use the constructed where clause with bounds
886888 {
889+ use former:: FormingEnd ; // Bring FormingEnd trait into scope
887890 // Standard former methods (new, begin, form, end) - Adjusted to use Definition::Types
888891 #[ inline( always ) ] pub fn new( on_end : Definition :: End ) -> Self { Self :: begin( None , None , on_end ) }
889892 #[ inline( always ) ] pub fn new_coercing< IntoEnd >( end : IntoEnd ) -> Self where IntoEnd : Into < Definition :: End > { Self :: begin_coercing( None , None , end ) }
@@ -953,7 +956,7 @@ pub( super ) fn handle_struct_non_zero_variant
953956 quote ! { }
954957 } ;
955958 // Construct DefinitionTypes generics list for FormingEnd impl
956- let mut forming_end_def_types_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. iter ( ) . cloned ( ) . collect ( ) ; // Use iter ().cloned ()
959+ let mut forming_end_def_types_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. clone ( ) . into_iter ( ) . collect ( ) ; // Use clone ().into_iter ()
957960 let context_param : GenericParam = parse_quote ! ( Context2 = ( ) ) ;
958961 let formed_param : GenericParam = parse_quote ! ( Formed2 = #enum_name< #enum_generics_ty_no_comma > ) ;
959962 forming_end_def_types_generics_vec. push ( context_param ) ;
@@ -1006,7 +1009,7 @@ pub( super ) fn handle_struct_non_zero_variant
10061009 quote ! { }
10071010 } ;
10081011 // Construct Definition generics list for return type
1009- let mut static_method_def_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. iter ( ) . cloned ( ) . collect ( ) ; // Use iter ().cloned ()
1012+ let mut static_method_def_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. clone ( ) . into_iter ( ) . collect ( ) ; // Use clone ().into_iter ()
10101013 let context_param : GenericParam = parse_quote ! ( Context2 = ( ) ) ;
10111014 let formed_param : GenericParam = parse_quote ! ( Formed2 = #enum_name< #enum_generics_ty_no_comma > ) ;
10121015 let end_param : GenericParam = parse_quote ! ( End2 = #end_struct_name< #enum_generics_ty_no_comma > ) ;
@@ -1039,7 +1042,7 @@ pub( super ) fn handle_struct_non_zero_variant
10391042 let constructor_params : Vec < _ > = variant_field_info. iter ( ) . filter ( |f| f. is_constructor_arg ) . map ( |f| { let pn = & f. ident ; let ty = & f. ty ; quote ! { #pn : impl Into <#ty> } } ) . collect ( ) ;
10401043 let all_fields_are_args = !variant_field_info. is_empty ( ) && variant_field_info. iter ( ) . all ( |f| f. is_constructor_arg ) ;
10411044 // Construct Definition generics list for return type
1042- let mut standalone_def_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. iter ( ) . cloned ( ) . collect ( ) ; // Use iter ().cloned ()
1045+ let mut standalone_def_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. clone ( ) . into_iter ( ) . collect ( ) ; // Use clone ().into_iter ()
10431046 let context_param : GenericParam = parse_quote ! ( Context2 = ( ) ) ;
10441047 let formed_param : GenericParam = parse_quote ! ( Formed2 = #enum_name< #enum_generics_ty_no_comma > ) ;
10451048 let end_param : GenericParam = parse_quote ! ( End2 = #end_struct_name< #enum_generics_ty_no_comma > ) ;
@@ -1048,7 +1051,7 @@ pub( super ) fn handle_struct_non_zero_variant
10481051 standalone_def_generics_vec. push ( end_param ) ;
10491052 let standalone_def_generics = Punctuated :: < _ , Comma > :: from_iter ( standalone_def_generics_vec ) ;
10501053 // Construct Former generics list for return type
1051- let mut standalone_former_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. iter ( ) . cloned ( ) . collect ( ) ; // Use iter ().cloned ()
1054+ let mut standalone_former_generics_vec : Vec < GenericParam > = enum_generics_ty_no_comma. clone ( ) . into_iter ( ) . collect ( ) ; // Use clone ().into_iter ()
10521055 let def_param : GenericParam = parse_quote ! ( Definition = #def_name< #standalone_def_generics > ) ;
10531056 standalone_former_generics_vec. push ( def_param ) ;
10541057 let standalone_former_generics = Punctuated :: < _ , Comma > :: from_iter ( standalone_former_generics_vec ) ;
0 commit comments