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