pub fn from_iter<T: 'static, I: 'static>(iter: I) -> Source<T> where
T: Send + Sync,
I: IntoIterator<Item = T> + Send + Sync + Clone,
<I as IntoIterator>::IntoIter: Send + Sync,
Expand description
Converts an iterable or Iterator
to a callbag pullable source.
It only sends data when requested.
Examples
Convert an iterable:
use crossbeam_queue::SegQueue;
use std::sync::Arc;
use callbag::{for_each, from_iter};
let actual = Arc::new(SegQueue::new());
let source = from_iter([10, 20, 30, 40]);
for_each({
let actual = Arc::clone(&actual);
move |x| {
println!("{}", x);
actual.push(x);
}
})(source);
assert_eq!(
&{
let mut v = vec![];
for _i in 0..actual.len() {
v.push(actual.pop().unwrap());
}
v
}[..],
[10, 20, 30, 40]
);
Convert an Iterator:
use crossbeam_queue::SegQueue;
use std::sync::Arc;
use callbag::{for_each, from_iter};
let actual = Arc::new(SegQueue::new());
let source = from_iter([10, 20, 30, 40].into_iter().enumerate());
for_each({
let actual = Arc::clone(&actual);
move |x| {
println!("{:?}", x);
actual.push(x);
}
})(source);
assert_eq!(
&{
let mut v = vec![];
for _i in 0..actual.len() {
v.push(actual.pop().unwrap());
}
v
}[..],
[(0, 10), (1, 20), (2, 30), (3, 40)]
);