I\'m trying to understand what syntax should I use for take_while() with futures::Stream;
crate (0.1.25). Here\'s a piece of code (on playground):
u
take_while
expects the closure to return a future, or something that can be converted to a future. bool
doesn't implement IntoFuture
, so you have to wrap it in a future instead. future::ok returns a future that is immediately ready with the specified value.
use futures::{future, stream, Stream}; // 0.1.25
fn into_many(i: i32) -> impl Stream<Item = i32, Error = ()> {
stream::iter_ok(0..i)
}
fn main() {
println!("start:");
let foo = into_many(10)
.take_while(|&x| { future::ok(x < 10) })
.map(|x| {
println!("number={}", x);
x
})
.wait();
for _ in foo {}
println!("finish:");
}
wait
returns an iterator version of the stream, but that iterator remains lazy, which means you need to iterate it to actually execute your closure:
use futures::{stream, Stream}; // 0.1.25
fn into_many(i: i32) -> impl Stream<Item = i32, Error = ()> {
stream::iter_ok(0..i)
}
fn main() {
println!("start:");
let foo = into_many(10)
// .take_while(|x| { x < 10 })
.map(|x| {
println!("number={}", x);
x
})
.wait();
for _ in foo {} // ← this
println!("finish:");
}
(link to playground)