fix: stream::take_while (#485)

When the predicate is false, the stream should be ended.
pull/489/head
Friedel Ziegelmayer 5 years ago committed by Stjepan Glavina
parent d2d63348c7
commit 4a78f731b7

@ -303,6 +303,7 @@ extension_trait! {
#
# }) }
```
"#]
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P, Self::Item>
where
@ -397,9 +398,9 @@ extension_trait! {
use async_std::stream;
let v = stream::from_iter(vec![&1, &2, &3]);
let mut v_cloned = v.cloned();
assert_eq!(v_cloned.next().await, Some(1));
assert_eq!(v_cloned.next().await, Some(2));
assert_eq!(v_cloned.next().await, Some(3));

@ -45,10 +45,12 @@ where
let next = futures_core::ready!(this.stream.poll_next(cx));
match next {
Some(v) if (this.predicate)(&v) => Poll::Ready(Some(v)),
Some(_) => {
cx.waker().wake_by_ref();
Poll::Pending
Some(v) => {
if (this.predicate)(&v) {
Poll::Ready(Some(v))
} else {
Poll::Ready(None)
}
}
None => Poll::Ready(None),
}

Loading…
Cancel
Save