Skip to content

Commit b420ea4

Browse files
committed
get rid of internidiate field_options_res
1 parent 50ec829 commit b420ea4

File tree

1 file changed

+36
-40
lines changed

1 file changed

+36
-40
lines changed

pyo3-macros-backend/src/pyclass.rs

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -230,50 +230,46 @@ pub fn build_py_class(
230230
For an explanation, see https://pyo3.rs/latest/class.html#no-generic-parameters"
231231
);
232232

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+
}
241247
})
242248
.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+
}
249260
})
250261
.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+
};
277273

278274
all_errors.ensure_empty()?;
279275

0 commit comments

Comments
 (0)