logo
pub fn from_fn<T, F>(f: F) -> FromFn<F> where
    F: FnMut() -> Option<T>, 
Expand description

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::stream;

let mut count = 0u8;
let s = stream::from_fn(|| {
    count += 1;
    if count > 3 {
        None
    } else {
        Some(count)
    }
});

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);