about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthias Krüger <matthias.krueger@famsik.de>2022-11-22 00:01:08 +0100
committerGitHub <noreply@github.com>2022-11-22 00:01:08 +0100
commitba135ee568e4f7718b9d270fa20999b785dad9aa (patch)
tree2d16bb05bd3ca97131d4499f2ab8499eda952a19
parent7a3eca690f730fbe354b37c5026321726aadd494 (diff)
parentff38c3528a6f6c94d45d803b7954a03997f3f4a9 (diff)
downloadrust-ba135ee568e4f7718b9d270fa20999b785dad9aa.tar.gz
rust-ba135ee568e4f7718b9d270fa20999b785dad9aa.zip
Rollup merge of #104557 - eholk:dyn-star-in-traits, r=compiler-errors
Add a test case for async dyn* traits

This adds a test case that approximates async functions in dyn traits using `dyn*`. The purpose is to have an example of where we are with `dyn*` and the goal of using it for dyn traits.

Issue #102425

r? `@compiler-errors`
-rw-r--r--src/test/ui/dyn-star/dyn-async-trait.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/test/ui/dyn-star/dyn-async-trait.rs b/src/test/ui/dyn-star/dyn-async-trait.rs
new file mode 100644
index 00000000000..9b27133b493
--- /dev/null
+++ b/src/test/ui/dyn-star/dyn-async-trait.rs
@@ -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
+        })
+    }
+}
+
+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);
+}