[−][src]Function async_std::stream::from_fn
pub fn from_fn<T, F, Fut>(f: F) -> FromFn<F, Fut, T> where
F: FnMut() -> Fut,
Fut: Future<Output = Option<T>>,
Creates a new stream where to produce each new element a provided closure is called.
This allows creating a custom stream with any behaviour without using the more verbose
syntax of creating a dedicated type and implementing a Stream
trait for it.
Examples
use async_std::prelude::*; use async_std::sync::Mutex; use std::sync::Arc; use async_std::stream; let count = Arc::new(Mutex::new(0u8)); let s = stream::from_fn(|| { let count = Arc::clone(&count); async move { *count.lock().await += 1; if *count.lock().await > 3 { None } else { Some(*count.lock().await) } } }); pin_utils::pin_mut!(s); assert_eq!(s.next().await, Some(1)); assert_eq!(s.next().await, Some(2)); assert_eq!(s.next().await, Some(3)); assert_eq!(s.next().await, None);