]>
Commit | Line | Data |
---|---|---|
2b03887a FG |
1 | // check-pass |
2 | // edition:2021 | |
3 | ||
4 | #![feature(async_fn_in_trait)] | |
5 | #![allow(incomplete_features)] | |
6 | ||
7 | use std::future::Future; | |
8 | ||
9 | async fn yield_now() {} | |
10 | ||
11 | trait AsyncIterator { | |
12 | type Item; | |
13 | async fn next(&mut self) -> Option<Self::Item>; | |
14 | } | |
15 | ||
16 | struct YieldingRange { | |
17 | counter: u32, | |
18 | stop: u32, | |
19 | } | |
20 | ||
21 | impl AsyncIterator for YieldingRange { | |
22 | type Item = u32; | |
23 | ||
24 | async fn next(&mut self) -> Option<Self::Item> { | |
25 | if self.counter == self.stop { | |
26 | None | |
27 | } else { | |
28 | let c = self.counter; | |
29 | self.counter += 1; | |
30 | yield_now().await; | |
31 | Some(c) | |
32 | } | |
33 | } | |
34 | } | |
35 | ||
36 | async fn async_main() { | |
37 | let mut x = YieldingRange { counter: 0, stop: 10 }; | |
38 | ||
39 | while let Some(v) = x.next().await { | |
40 | println!("Hi: {v}"); | |
41 | } | |
42 | } | |
43 | ||
44 | fn main() { | |
45 | let _ = async_main(); | |
46 | } |