send/
send.rs

1#![allow(deprecated)]
2
3use generator::{yield_, Gn};
4use std::mem;
5
6fn sum(a: u32) -> u32 {
7    let mut sum = a;
8    let mut recv: u32;
9    while sum < 200 {
10        // println!("sum={} ", sum);
11        recv = yield_(sum).unwrap();
12        // println!("recv={}", recv);
13        sum += recv;
14    }
15    sum
16}
17
18fn main() {
19    // we specify the send type is u32
20    let mut s = Gn::<u32>::new(|| sum(0));
21    // first start the generator
22    assert_eq!(s.raw_send(None).unwrap(), 0);
23    let mut cur = 1;
24    let mut last = 1;
25
26    while !s.is_done() {
27        // println!("send={}", last);
28        mem::swap(&mut cur, &mut last);
29        cur = s.send(cur); // s += cur
30                           // println!("cur={} last={}", cur, last);
31        println!("{cur}");
32    }
33}