[−][src]Function stream_generator::generate_stream
pub fn generate_stream<T, F, R>(generator: F) -> impl Stream<Item = T> where
F: FnOnce(Yielder<T>) -> R,
R: Future<Output = ()>,
Creates a stream from generator
.
generator
will receive a yielder object as an argument and should return a future
(usually an async block) that will produce the stream's values using the yielder.
If the future finishes, the stream will end after producing all yielded values. If the
future never finishes, the stream will also never finish.
use futures::{stream::StreamExt, Stream}; use stream_generator::generate_stream; fn my_stream(start: u32) -> impl Stream<Item=u32> { generate_stream(move |mut y| async move { for i in start.. { y.send(i).await; if i == 45 { break; } } }) } #[tokio::main] async fn main() { let values: Vec<_> = my_stream(42).collect().await; assert_eq!(values, vec![42, 43, 44, 45]); }