@@ -51,10 +51,9 @@ impl UnionBindGenerator {
51
51
assert ! ( u8 :: try_from( self . types. len( ) ) . is_ok( ) ) ;
52
52
53
53
write_str ! ( self , " #[new]" ) ;
54
- write_str ! ( self , " #[pyo3(signature = (item = None))]" ) ;
55
54
write_fmt ! (
56
55
self ,
57
- " pub fn new(item: Option< {}Union> ) -> Self {{" ,
56
+ " pub fn new(item: {}Union) -> Self {{" ,
58
57
self . struct_name
59
58
) ;
60
59
write_str ! ( self , " Self { item }" ) ;
@@ -66,17 +65,15 @@ impl UnionBindGenerator {
66
65
self ,
67
66
" pub fn get(&self, py: Python) -> Option<Py<PyAny>> {"
68
67
) ;
69
- write_str ! ( self , " match self.item.as_ref() {" ) ;
68
+ write_str ! ( self , " match & self.item {" ) ;
70
69
71
70
for variable_info in & self . types {
72
71
let variable_name = variable_info. name . as_str ( ) ;
73
72
74
- if variable_name == "NONE" {
75
- write_str ! ( self , " None => None," ) ;
76
- } else {
73
+ if variable_name != "NONE" {
77
74
write_fmt ! (
78
75
self ,
79
- " Some( {}Union::{variable_name}(item) ) => Some(item.clone_ref(py).into_any())," ,
76
+ " {}Union::{variable_name}(item) => Some(item.clone_ref(py).into_any())," ,
80
77
self . struct_name
81
78
) ;
82
79
}
@@ -94,19 +91,17 @@ impl UnionBindGenerator {
94
91
95
92
fn generate_inner_repr_method ( & mut self ) {
96
93
write_str ! ( self , " pub fn inner_repr(&self, py: Python) -> String {" ) ;
97
- write_str ! ( self , " match self.item.as_ref() {" ) ;
94
+ write_str ! ( self , " match & self.item {" ) ;
98
95
99
96
for variable_info in & self . types {
100
97
let variable_name = variable_info. name . as_str ( ) ;
101
98
102
99
if variable_info. value . is_some ( ) {
103
100
write_fmt ! (
104
101
self ,
105
- " Some( {}Union::{variable_name}(item) ) => item.borrow(py).__repr__(py)," ,
102
+ " {}Union::{variable_name}(item) => item.borrow(py).__repr__(py)," ,
106
103
self . struct_name
107
104
) ;
108
- } else {
109
- write_str ! ( self , " None => crate::none_str()," ) ;
110
105
}
111
106
}
112
107
@@ -116,24 +111,18 @@ impl UnionBindGenerator {
116
111
117
112
fn generate_repr_method ( & mut self ) {
118
113
write_str ! ( self , " pub fn __repr__(&self, py: Python) -> String {" ) ;
119
- write_str ! ( self , " match self.item.as_ref() {" ) ;
114
+ write_str ! ( self , " match & self.item {" ) ;
120
115
121
116
for variable_info in & self . types {
122
117
let variable_name = variable_info. name . as_str ( ) ;
123
118
124
119
if variable_info. value . is_some ( ) {
125
120
write_fmt ! (
126
121
self ,
127
- " Some( {}Union::{variable_name}(item) ) => format!(\" {}({{}})\" , item.borrow(py).__repr__(py))," ,
122
+ " {}Union::{variable_name}(item) => format!(\" {}({{}})\" , item.borrow(py).__repr__(py))," ,
128
123
self . struct_name,
129
124
self . struct_name
130
125
) ;
131
- } else {
132
- write_fmt ! (
133
- self ,
134
- " None => String::from(\" {}()\" )," ,
135
- self . struct_name
136
- ) ;
137
126
}
138
127
}
139
128
@@ -177,7 +166,7 @@ impl Generator for UnionBindGenerator {
177
166
}
178
167
179
168
fn generate_definition ( & mut self ) {
180
- write_fmt ! ( self , "#[derive(Debug, pyo3::FromPyObject)]" ) ;
169
+ write_fmt ! ( self , "#[derive(pyo3::FromPyObject)]" ) ;
181
170
write_fmt ! ( self , "pub enum {}Union {{" , self . struct_name) ;
182
171
183
172
for variable_info in self . types . iter ( ) . skip ( 1 ) {
@@ -192,17 +181,26 @@ impl Generator for UnionBindGenerator {
192
181
if self . is_frozen {
193
182
write_str ! ( self , "#[pyclass(module = \" rlbot_flatbuffers\" , frozen)]" ) ;
194
183
} else {
195
- write_str ! ( self , "#[pyclass(module = \" rlbot_flatbuffers\" )]" ) ;
184
+ write_str ! ( self , "#[pyclass(module = \" rlbot_flatbuffers\" , set_all )]" ) ;
196
185
}
197
186
198
- write_fmt ! ( self , "#[derive(Debug, Default)]" ) ;
199
187
write_fmt ! ( self , "pub struct {} {{" , self . struct_name) ;
188
+ write_fmt ! ( self , " item: {}Union," , self . struct_name) ;
189
+ write_str ! ( self , "}" ) ;
190
+ write_str ! ( self , "" ) ;
200
191
201
- if !self . is_frozen {
202
- write_str ! ( self , " #[pyo3(set)]" ) ;
203
- }
204
-
205
- write_fmt ! ( self , " pub item: Option<{}Union>," , self . struct_name) ;
192
+ write_fmt ! ( self , "impl crate::PyDefault for {} {{" , self . struct_name) ;
193
+ write_str ! ( self , " fn py_default(py: Python) -> Py<Self> {" ) ;
194
+ write_str ! ( self , " Py::new(py, Self {" ) ;
195
+ write_fmt ! (
196
+ self ,
197
+ " item: {}Union::{}(super::{}::py_default(py))," ,
198
+ self . struct_name,
199
+ self . types[ 1 ] . name,
200
+ self . types[ 1 ] . name
201
+ ) ;
202
+ write_str ! ( self , " }).unwrap()" ) ;
203
+ write_str ! ( self , " }" ) ;
206
204
write_str ! ( self , "}" ) ;
207
205
write_str ! ( self , "" ) ;
208
206
}
@@ -228,9 +226,8 @@ impl Generator for UnionBindGenerator {
228
226
if variable_name == "NONE" {
229
227
write_fmt ! (
230
228
self ,
231
- " flat::{}::NONE => {}::default ()," ,
229
+ " flat::{}::NONE => unreachable! ()," ,
232
230
self . struct_t_name,
233
- self . struct_name
234
231
) ;
235
232
} else {
236
233
write_fmt ! (
@@ -242,7 +239,7 @@ impl Generator for UnionBindGenerator {
242
239
243
240
write_fmt ! (
244
241
self ,
245
- " item: Some( {}Union::{variable_name}(" ,
242
+ " item: {}Union::{variable_name}(" ,
246
243
self . struct_name
247
244
) ;
248
245
@@ -251,7 +248,7 @@ impl Generator for UnionBindGenerator {
251
248
" Py::new(py, super::{variable_name}::from_gil(py, *item)).unwrap(),"
252
249
) ;
253
250
254
- write_fmt ! ( self , " )) ," ) ;
251
+ write_fmt ! ( self , " )," ) ;
255
252
write_fmt ! ( self , " }}," ) ;
256
253
}
257
254
}
@@ -275,15 +272,15 @@ impl Generator for UnionBindGenerator {
275
272
self . struct_name
276
273
) ;
277
274
278
- write_str ! ( self , " match py_type.item.as_ref() {" ) ;
275
+ write_str ! ( self , " match & py_type.item {" ) ;
279
276
280
277
for variable_info in & self . types {
281
278
let variable_name = variable_info. name . as_str ( ) ;
282
279
283
280
if let Some ( ref value) = variable_info. value {
284
281
write_fmt ! (
285
282
self ,
286
- " Some( {}Union::{value}(item) ) => {{" ,
283
+ " {}Union::{value}(item) => {{" ,
287
284
self . struct_name,
288
285
) ;
289
286
@@ -294,8 +291,6 @@ impl Generator for UnionBindGenerator {
294
291
) ;
295
292
296
293
write_str ! ( self , " }," ) ;
297
- } else {
298
- write_str ! ( self , " None => Self::NONE," ) ;
299
294
}
300
295
}
301
296
0 commit comments