]> git.lizzy.rs Git - rust.git/blob - src/test/ui/async-await/in-trait/issue-102138.rs
Rollup merge of #105267 - compiler-errors:issue-104613, r=oli-obk
[rust.git] / src / test / ui / async-await / in-trait / issue-102138.rs
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 }