@@ -230,50 +230,46 @@ pub fn build_py_class(
230
230
For an explanation, see https://pyo3.rs/latest/class.html#no-generic-parameters"
231
231
) ;
232
232
233
- let mut field_options_res: Vec < Result < ( & syn:: Field , FieldPyO3Options ) > > =
234
- match & mut class. fields {
235
- syn:: Fields :: Named ( fields) => fields
236
- . named
237
- . iter_mut ( )
238
- . map ( |field| {
239
- FieldPyO3Options :: take_pyo3_options ( & mut field. attrs )
240
- . map ( move |options| ( & * field, options) )
233
+ let mut all_errors = ErrorCombiner ( None ) ;
234
+
235
+ let mut field_options: Vec < ( & syn:: Field , FieldPyO3Options ) > = match & mut class. fields {
236
+ syn:: Fields :: Unnamed ( fields) => fields
237
+ . unnamed
238
+ . iter_mut ( )
239
+ . filter_map ( |field| {
240
+ match FieldPyO3Options :: take_pyo3_options ( & mut field. attrs ) {
241
+ Ok ( options) => Some ( ( & * field, options) ) ,
242
+ Err ( e) => {
243
+ all_errors. combine ( e) ;
244
+ None
245
+ }
246
+ }
241
247
} )
242
248
. collect :: < Vec < _ > > ( ) ,
243
- syn:: Fields :: Unnamed ( fields) => fields
244
- . unnamed
245
- . iter_mut ( )
246
- . map ( |field| {
247
- FieldPyO3Options :: take_pyo3_options ( & mut field. attrs )
248
- . map ( move |options| ( & * field, options) )
249
+ syn:: Fields :: Named ( fields) => fields
250
+ . named
251
+ . iter_mut ( )
252
+ . filter_map ( |field| {
253
+ match FieldPyO3Options :: take_pyo3_options ( & mut field. attrs ) {
254
+ Ok ( options) => Some ( ( & * field, options) ) ,
255
+ Err ( e) => {
256
+ all_errors. combine ( e) ;
257
+ None
258
+ }
259
+ }
249
260
} )
250
261
. collect :: < Vec < _ > > ( ) ,
251
- syn:: Fields :: Unit => {
252
- if let Some ( attr) = args. options . set_all {
253
- return Err ( syn:: Error :: new_spanned ( attr, UNIT_SET ) ) ;
254
- } ;
255
- if let Some ( attr) = args. options . get_all {
256
- return Err ( syn:: Error :: new_spanned ( attr, UNIT_GET ) ) ;
257
- } ;
258
- // No fields for unit struct
259
- Vec :: new ( )
260
- }
261
- } ;
262
-
263
- // handle error here
264
-
265
- let mut all_errors = ErrorCombiner ( None ) ;
266
-
267
- let mut field_options: Vec < ( & syn:: Field , FieldPyO3Options ) > = field_options_res
268
- . drain ( ..)
269
- . filter_map ( |result| match result {
270
- Err ( err) => {
271
- all_errors. combine ( err) ;
272
- None
273
- }
274
- Ok ( options) => Some ( options) ,
275
- } )
276
- . collect :: < Vec < _ > > ( ) ;
262
+ syn:: Fields :: Unit => {
263
+ if let Some ( attr) = args. options . set_all {
264
+ return Err ( syn:: Error :: new_spanned ( attr, UNIT_SET ) ) ;
265
+ } ;
266
+ if let Some ( attr) = args. options . get_all {
267
+ return Err ( syn:: Error :: new_spanned ( attr, UNIT_GET ) ) ;
268
+ } ;
269
+ // No fields for unit struct
270
+ Vec :: new ( )
271
+ }
272
+ } ;
277
273
278
274
all_errors. ensure_empty ( ) ?;
279
275
0 commit comments