File tree Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Original file line number Diff line number Diff line change 1+ // check-pass
2+ // edition: 2021
3+
4+ // This test case is meant to demonstrate how close we can get to async
5+ // functions in dyn traits with the current level of dyn* support.
6+
7+ #![ feature( dyn_star) ]
8+ #![ allow( incomplete_features) ]
9+
10+ use std:: future:: Future ;
11+
12+ trait DynAsyncCounter {
13+ fn increment < ' a > ( & ' a mut self ) -> dyn * Future < Output = usize > + ' a ;
14+ }
15+
16+ struct MyCounter {
17+ count : usize ,
18+ }
19+
20+ impl DynAsyncCounter for MyCounter {
21+ fn increment < ' a > ( & ' a mut self ) -> dyn * Future < Output = usize > + ' a {
22+ Box :: pin ( async {
23+ self . count += 1 ;
24+ self . count
25+ } ) as dyn * Future < Output = _ > // FIXME(dyn-star): coercion doesn't work here yet
26+ }
27+ }
28+
29+ async fn do_counter ( counter : & mut dyn DynAsyncCounter ) -> usize {
30+ counter. increment ( ) . await
31+ }
32+
33+ fn main ( ) {
34+ let mut counter = MyCounter { count : 0 } ;
35+ let _ = do_counter ( & mut counter) ;
36+ }
You can’t perform that action at this time.
0 commit comments