pyo3_macros_backend/
combine_errors.rs1pub(crate) trait CombineErrors: Iterator {
2 type Ok;
3 fn try_combine_syn_errors(self) -> syn::Result<Vec<Self::Ok>>;
4}
5
6impl<I, T> CombineErrors for I
7where
8 I: Iterator<Item = syn::Result<T>>,
9{
10 type Ok = T;
11
12 fn try_combine_syn_errors(self) -> syn::Result<Vec<Self::Ok>> {
13 let mut oks: Vec<Self::Ok> = Vec::new();
14 let mut errors: Vec<syn::Error> = Vec::new();
15
16 for res in self {
17 match res {
18 Ok(val) => oks.push(val),
19 Err(e) => errors.push(e),
20 }
21 }
22
23 let mut err_iter = errors.into_iter();
24 let mut err = match err_iter.next() {
25 None => return Ok(oks),
27 Some(e) => e,
28 };
29
30 for e in err_iter {
31 err.combine(e);
32 }
33
34 Err(err)
35 }
36}