Add a test case for async dyn* traits
This commit is contained in:
parent
7fe6f36224
commit
1a913a6347
36
src/test/ui/dyn-star/dyn-async-trait.rs
Normal file
36
src/test/ui/dyn-star/dyn-async-trait.rs
Normal file
@ -0,0 +1,36 @@
|
||||
// check-pass
|
||||
// edition: 2021
|
||||
|
||||
// This test case is meant to demonstrate how close we can get to async
|
||||
// functions in dyn traits with the current level of dyn* support.
|
||||
|
||||
#![feature(dyn_star)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
use std::future::Future;
|
||||
|
||||
trait DynAsyncCounter {
|
||||
fn increment<'a>(&'a mut self) -> dyn* Future<Output = usize> + 'a;
|
||||
}
|
||||
|
||||
struct MyCounter {
|
||||
count: usize,
|
||||
}
|
||||
|
||||
impl DynAsyncCounter for MyCounter {
|
||||
fn increment<'a>(&'a mut self) -> dyn* Future<Output = usize> + 'a {
|
||||
Box::pin(async {
|
||||
self.count += 1;
|
||||
self.count
|
||||
}) as dyn* Future<Output = _> // FIXME(dyn-star): coercion doesn't work here yet
|
||||
}
|
||||
}
|
||||
|
||||
async fn do_counter(counter: &mut dyn DynAsyncCounter) -> usize {
|
||||
counter.increment().await
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut counter = MyCounter { count: 0 };
|
||||
let _ = do_counter(&mut counter);
|
||||
}
|
Loading…
Reference in New Issue
Block a user