1use crate::serializable::Token;
2use rayon::prelude::{FromParallelIterator, ParallelIterator};
3
4pub(crate) trait WithToken {
5 fn token(&self) -> Token;
6}
7
8pub trait ParallelIteratorExt {
9 fn par_try_collect<C, T, E>(self) -> Result<C, E>
10 where
11 Self: ParallelIterator<Item = Result<T, E>>,
12 C: FromParallelIterator<T>,
13 T: Send,
14 E: Send;
15}
16
17impl<I> ParallelIteratorExt for I {
18 fn par_try_collect<C, T, E>(self) -> Result<C, E>
19 where
20 Self: ParallelIterator<Item = Result<T, E>>,
21 C: FromParallelIterator<T>,
22 T: Send,
23 E: Send,
24 {
25 let collection: Result<C, E> = self.collect();
26 collection
27 }
28}