@@ -651,7 +651,7 @@ impl PythonBindGenerator {
651
651
self . write_str ( " #[new]" ) ;
652
652
assert ! ( u8 :: try_from( self . types. len( ) ) . is_ok( ) ) ;
653
653
654
- let mut signature_parts = vec ! [ "item_type=Default::default()" . to_string ( ) ] ;
654
+ let mut signature_parts = Vec :: new ( ) ;
655
655
656
656
for variable_info in & self . types {
657
657
let variable_type = & variable_info[ 1 ] ;
@@ -668,7 +668,6 @@ impl PythonBindGenerator {
668
668
self . write_string ( format ! ( " #[pyo3(signature = ({}))]" , signature_parts. join( ", " ) ) ) ;
669
669
self . write_str ( " pub fn new(" ) ;
670
670
671
- self . write_string ( format ! ( " item_type: {}Type," , self . struct_name) ) ;
672
671
for variable_info in & self . types {
673
672
let variable_type = & variable_info[ 1 ] ;
674
673
@@ -684,9 +683,33 @@ impl PythonBindGenerator {
684
683
}
685
684
686
685
self . write_str ( " ) -> Self {" ) ;
687
- self . write_str ( " Self {" ) ;
688
686
687
+ self . write_string ( format ! ( " let mut item_type = {}Type::default();" , self . struct_name) ) ;
688
+ for variable_info in & self . types {
689
+ let variable_name = & variable_info[ 0 ] ;
690
+ let variable_type = & variable_info[ 1 ] ;
691
+
692
+ if variable_type. is_empty ( ) {
693
+ continue ;
694
+ }
695
+
696
+ let snake_case_name = & variable_info[ 2 ] ;
697
+
698
+ self . file_contents . push ( Cow :: Borrowed ( "" ) ) ;
699
+ self . file_contents . push ( Cow :: Owned ( format ! (
700
+ " if {snake_case_name}.is_some() {{" ,
701
+ ) ) ) ;
702
+ self . file_contents . push ( Cow :: Owned ( format ! (
703
+ " item_type = {}Type::{variable_name};" , self . struct_name
704
+ ) ) ) ;
705
+ self . file_contents . push ( Cow :: Borrowed ( " }" ) ) ;
706
+ }
707
+
708
+
709
+ self . write_str ( "" ) ;
710
+ self . write_str ( " Self {" ) ;
689
711
self . write_str ( " item_type," ) ;
712
+
690
713
for variable_info in & self . types {
691
714
let variable_type = & variable_info[ 1 ] ;
692
715
0 commit comments