use frappe::Sink;
use rand::distributions::Uniform;
use rand::Rng;
use std::thread;
use std::time::Duration;
fn main() {
let sink = Sink::new();
let result = sink
.stream()
.map_n(|arg, sender| {
let n = *arg;
thread::spawn(move || {
thread::sleep(Duration::from_millis(n));
sender.send(n); });
})
.fold(Vec::new(), |mut vec, n| {
vec.push(*n);
vec
});
let mut rng = rand::thread_rng();
let input: Vec<_> = rng
.sample_iter(&Uniform::new_inclusive(0, 100))
.take(10)
.collect();
println!("input: {:?}", input);
sink.feed(input);
thread::sleep(Duration::from_millis(150));
println!("result: {:?}", result.sample());
}