mirror of
https://gitlab.com/msrd0/gotham-restful.git
synced 2025-02-23 13:02:28 +00:00
28 lines
643 B
Rust
28 lines
643 B
Rust
|
use syn::Error;
|
||
|
|
||
|
pub trait CollectToResult
|
||
|
{
|
||
|
type Item;
|
||
|
|
||
|
fn collect_to_result(self) -> Result<Vec<Self::Item>, Error>;
|
||
|
}
|
||
|
|
||
|
impl<Item, I> CollectToResult for I
|
||
|
where
|
||
|
I : Iterator<Item = Result<Item, Error>>
|
||
|
{
|
||
|
type Item = Item;
|
||
|
|
||
|
fn collect_to_result(self) -> Result<Vec<Item>, Error>
|
||
|
{
|
||
|
self.fold(<Result<Vec<Item>, Error>>::Ok(Vec::new()), |res, code| {
|
||
|
match (code, res) {
|
||
|
(Ok(code), Ok(mut codes)) => { codes.push(code); Ok(codes) },
|
||
|
(Ok(_), Err(errors)) => Err(errors),
|
||
|
(Err(err), Ok(_)) => Err(err),
|
||
|
(Err(err), Err(mut errors)) => { errors.combine(err); Err(errors) }
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|