Skip to content

Commit 4a78f73

Browse files
dignifiedquireStjepan Glavina
authored andcommitted
fix: stream::take_while (#485)
When the predicate is false, the stream should be ended.
1 parent d2d6334 commit 4a78f73

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

src/stream/stream/mod.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ extension_trait! {
303303
304304
#
305305
# }) }
306+
```
306307
"#]
307308
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P, Self::Item>
308309
where
@@ -397,9 +398,9 @@ extension_trait! {
397398
use async_std::stream;
398399
399400
let v = stream::from_iter(vec![&1, &2, &3]);
400-
401+
401402
let mut v_cloned = v.cloned();
402-
403+
403404
assert_eq!(v_cloned.next().await, Some(1));
404405
assert_eq!(v_cloned.next().await, Some(2));
405406
assert_eq!(v_cloned.next().await, Some(3));

src/stream/stream/take_while.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,12 @@ where
4545
let next = futures_core::ready!(this.stream.poll_next(cx));
4646

4747
match next {
48-
Some(v) if (this.predicate)(&v) => Poll::Ready(Some(v)),
49-
Some(_) => {
50-
cx.waker().wake_by_ref();
51-
Poll::Pending
48+
Some(v) => {
49+
if (this.predicate)(&v) {
50+
Poll::Ready(Some(v))
51+
} else {
52+
Poll::Ready(None)
53+
}
5254
}
5355
None => Poll::Ready(None),
5456
}

0 commit comments

Comments
 (0)