@@ -1086,8 +1086,10 @@ fn pyi_generator(type_data: &[(String, String, Vec<Vec<String>>)]) -> io::Result
1086
1086
file_contents. push ( Cow :: Owned ( format ! ( " item_type: {}Type" , type_name) ) ) ;
1087
1087
}
1088
1088
1089
+ let mut python_types = Vec :: new ( ) ;
1090
+
1089
1091
' outer: for variable_info in types {
1090
- let mut variable_name = & variable_info[ 0 ] ;
1092
+ let mut variable_name = variable_info[ 0 ] . as_str ( ) ;
1091
1093
1092
1094
if variable_name == "NONE" {
1093
1095
continue ;
@@ -1108,6 +1110,7 @@ fn pyi_generator(type_data: &[(String, String, Vec<Vec<String>>)]) -> io::Result
1108
1110
1109
1111
for ( rust_type, python_type) in primitive_map {
1110
1112
if variable_type == rust_type {
1113
+ python_types. push ( python_type. to_string ( ) ) ;
1111
1114
file_contents. push ( Cow :: Owned ( format ! ( " {variable_name}: {python_type}" ) ) ) ;
1112
1115
continue ' outer;
1113
1116
}
@@ -1118,6 +1121,8 @@ fn pyi_generator(type_data: &[(String, String, Vec<Vec<String>>)]) -> io::Result
1118
1121
. trim_start_matches ( "Vec<" )
1119
1122
. trim_end_matches ( '>' )
1120
1123
. trim_end_matches ( 'T' ) ;
1124
+
1125
+ python_types. push ( format ! ( "list[{type_name}]" ) ) ;
1121
1126
file_contents. push ( Cow :: Owned ( format ! ( " {variable_name}: list[{type_name}]" ) ) ) ;
1122
1127
} else if variable_type. starts_with ( "Option<" ) {
1123
1128
let type_name = variable_type
@@ -1126,24 +1131,32 @@ fn pyi_generator(type_data: &[(String, String, Vec<Vec<String>>)]) -> io::Result
1126
1131
. trim_end_matches ( '>' )
1127
1132
. trim_end_matches ( 'T' ) ;
1128
1133
1129
- if type_name == "bool" {
1130
- file_contents . push ( Cow :: Owned ( format ! ( " {variable_name}: Optional[ bool]" ) ) ) ;
1134
+ let python_type = if type_name == "bool" {
1135
+ " bool"
1131
1136
} else if type_name == "i32" || type_name == "u32" {
1132
- file_contents . push ( Cow :: Owned ( format ! ( " {variable_name}: Optional[ int]" ) ) ) ;
1137
+ " int"
1133
1138
} else if type_name == "f32" {
1134
- file_contents . push ( Cow :: Owned ( format ! ( " {variable_name}: Optional[ float]" ) ) ) ;
1139
+ " float"
1135
1140
} else if type_name == "String" {
1136
- file_contents . push ( Cow :: Owned ( format ! ( " {variable_name}: Optional[ str]" ) ) ) ;
1141
+ " str"
1137
1142
} else {
1138
- file_contents. push ( Cow :: Owned ( format ! ( " {variable_name}: Optional[{type_name}]" ) ) ) ;
1139
- }
1143
+ type_name
1144
+ } ;
1145
+
1146
+ python_types. push ( format ! ( "Optional[{python_type}]" ) ) ;
1147
+ file_contents. push ( Cow :: Owned ( format ! ( " {variable_name}: Optional[{python_type}]" ) ) ) ;
1140
1148
} else if variable_type. starts_with ( "Box<" ) && variable_type. ends_with ( "T>" ) {
1141
1149
let type_name = variable_type. trim_start_matches ( "Box<" ) . trim_end_matches ( "T>" ) ;
1150
+
1151
+ python_types. push ( type_name. to_string ( ) ) ;
1142
1152
file_contents. push ( Cow :: Owned ( format ! ( " {variable_name}: {type_name}" ) ) ) ;
1143
1153
} else if variable_type. ends_with ( 'T' ) {
1144
1154
let type_name = variable_type. trim_end_matches ( 'T' ) ;
1155
+
1156
+ python_types. push ( type_name. to_string ( ) ) ;
1145
1157
file_contents. push ( Cow :: Owned ( format ! ( " {variable_name}: {type_name}" ) ) ) ;
1146
1158
} else {
1159
+ python_types. push ( variable_type. clone ( ) ) ;
1147
1160
file_contents. push ( Cow :: Owned ( format ! ( " {variable_name}: {variable_type}" ) ) ) ;
1148
1161
}
1149
1162
}
@@ -1156,6 +1169,7 @@ fn pyi_generator(type_data: &[(String, String, Vec<Vec<String>>)]) -> io::Result
1156
1169
file_contents. push ( Cow :: Borrowed ( " def __init__(" ) ) ;
1157
1170
file_contents. push ( Cow :: Borrowed ( " self," ) ) ;
1158
1171
1172
+ let mut i = 0 ;
1159
1173
for variable_info in types {
1160
1174
if & variable_info[ 0 ] == "NONE" {
1161
1175
continue ;
@@ -1187,7 +1201,10 @@ fn pyi_generator(type_data: &[(String, String, Vec<Vec<String>>)]) -> io::Result
1187
1201
}
1188
1202
} ;
1189
1203
1190
- file_contents. push ( Cow :: Owned ( format ! ( " {variable_name}={default_value}," ) ) ) ;
1204
+ let python_type = & python_types[ i] ;
1205
+ file_contents. push ( Cow :: Owned ( format ! ( " {variable_name}: {python_type}={default_value}," ) ) ) ;
1206
+
1207
+ i += 1 ;
1191
1208
}
1192
1209
1193
1210
file_contents. push ( Cow :: Borrowed ( " ): ..." ) ) ;
0 commit comments