diff options
Diffstat (limited to 'src/skip.rs')
-rw-r--r-- | src/skip.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/skip.rs b/src/skip.rs index 04eb16c..6c13d5d 100644 --- a/src/skip.rs +++ b/src/skip.rs @@ -5,7 +5,7 @@ // -pub trait SkipWhileMap<O, E>: Sized { +pub trait SkipWhileMap<O, E>: Iterator<Item = Result<O, E>> + Sized { /// Skip Elements while Ok(true) is returned. /// @@ -16,6 +16,21 @@ pub trait SkipWhileMap<O, E>: Sized { F: FnMut(&O) -> Result<bool, E>; } +impl<O, E, I> SkipWhileMap<O, E> for I + where I: Iterator<Item = Result<O, E>> + Sized +{ + + fn skip_while_map<F>(self, f: F) -> SkipWhileMapOk<Self, F, O, E> + where + F: FnMut(&O) -> Result<bool, E> + { + SkipWhileMapOk { + iter: self, + func: f, + } + } +} + #[must_use = "iterator adaptors are lazy and do nothing unless consumed"] pub struct SkipWhileMapOk<I, F, O, E> where @@ -30,7 +45,7 @@ pub struct SkipWhileMapOk<I, F, O, E> impl<I, O, E, F> Iterator for SkipWhileMapOk<I, F, O, E> where I: Iterator<Item = Result<O, E>>, - F: FnMut(O) -> Result<bool, E>, + F: FnMut(&O) -> Result<bool, E>, { type Item = Result<O, E>; @@ -38,7 +53,7 @@ where loop { match self.iter.next() { Some(Ok(x)) => { - match (self.func)(x) { + match (self.func)(&x) { Ok(true) => return Some(Ok(x)), Ok(false) => continue, Err(e) => return Some(Err(e)), |