@@ -35,13 +35,15 @@ mod next;
3535mod nth;
3636mod scan;
3737mod skip;
38+ mod skip_while;
3839mod take;
3940mod zip;
4041
4142pub use filter:: Filter ;
4243pub use fuse:: Fuse ;
4344pub use scan:: Scan ;
4445pub use skip:: Skip ;
46+ pub use skip_while:: SkipWhile ;
4547pub use take:: Take ;
4648pub use zip:: Zip ;
4749
@@ -693,7 +695,13 @@ pub trait Stream {
693695 Scan :: new ( self , initial_state, f)
694696 }
695697
696- /// Creates a combinator that skips the first `n` elements.
698+ /// Combinator that `skip`s elements based on a predicate.
699+ ///
700+ /// Takes a closure argument. It will call this closure on every element in
701+ /// the stream and ignore elements until it returns `false`.
702+ ///
703+ /// After `false` is returned, `SkipWhile`'s job is over and all further
704+ /// elements in the strem are yeilded.
697705 ///
698706 /// ## Examples
699707 ///
@@ -703,6 +711,27 @@ pub trait Stream {
703711 /// use std::collections::VecDeque;
704712 /// use async_std::stream::Stream;
705713 ///
714+ /// let a: VecDeque<_> = vec![-1i32, 0, 1].into_iter().collect();
715+ /// let mut s = a.skip_while(|x| x.is_negative());
716+ ///
717+ /// assert_eq!(s.next().await, Some(0));
718+ /// assert_eq!(s.next().await, Some(1));
719+ /// assert_eq!(s.next().await, None);
720+ /// #
721+ /// # }) }
722+ /// ```
723+ fn skip_while < P > ( self , predicate : P ) -> SkipWhile < Self , P , Self :: Item >
724+ where
725+ Self : Sized ,
726+ P : FnMut ( & Self :: Item ) -> bool ,
727+ {
728+ SkipWhile :: new ( self , predicate)
729+ }
730+
731+ /// Creates a combinator that skips the first `n` elements.
732+ ///
733+ /// ## Examples
734+ ///
706735 /// let s: VecDeque<usize> = vec![1, 2, 3].into_iter().collect();
707736 /// let mut skipped = s.skip(2);
708737 ///
0 commit comments