pipe/
pipe.rs

1use generator::*;
2
3fn main() {
4    // fn square<'a, T: Iterator<Item = u32> + 'a>(input: T) -> impl Iterator<Item = u32> + 'a {
5    fn square<'a, T: Iterator<Item = u32> + Send + 'a>(input: T) -> Generator<'a, (), u32> {
6        Gn::new_scoped(|mut s| {
7            for i in input {
8                s.yield_with(i * i);
9            }
10            done!();
11        })
12    }
13
14    // fn sum<'a, T: Iterator<Item = u32> + 'a>(input: T) -> impl Iterator<Item = u32> + 'a {
15    fn sum<'a, T: Iterator<Item = u32> + Send + 'a>(input: T) -> Generator<'a, (), u32> {
16        Gn::new_scoped(|mut s| {
17            let mut acc = 0;
18            for i in input {
19                acc += i;
20                s.yield_with(acc);
21            }
22            done!();
23        })
24    }
25
26    for (i, sum) in sum(square(0..20)).enumerate() {
27        println!("square_sum_{i:<2} = {sum:^4}");
28    }
29}