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}