1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
use try_from::TryFrom; use crate::{Error, ErrorKind, Result}; pub trait ParseIterator: Iterator { fn try_from_next<R, E>(&mut self) -> Result<R> where R: TryFrom<<Self as Iterator>::Item, Err = E>, Error: From<E>; } impl<T> ParseIterator for T where T: Iterator, { fn try_from_next<R, E>(&mut self) -> Result<R> where R: TryFrom<<Self as Iterator>::Item, Err = E>, Error: From<E>, { let value = self.next().ok_or_else(|| Error::new(ErrorKind::Parse))?; try_from::TryFrom::try_from(value).map_err(Into::into) } }