summaryrefslogtreecommitdiff
path: root/tests/ui/01-maybe-async.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/01-maybe-async.rs')
-rw-r--r--tests/ui/01-maybe-async.rs122
1 files changed, 122 insertions, 0 deletions
diff --git a/tests/ui/01-maybe-async.rs b/tests/ui/01-maybe-async.rs
new file mode 100644
index 0000000..2222ff6
--- /dev/null
+++ b/tests/ui/01-maybe-async.rs
@@ -0,0 +1,122 @@
+#![allow(dead_code)]
+
+use maybe_async::maybe_async;
+
+#[maybe_async(Send)]
+trait Trait {
+ fn sync_fn() {}
+
+ async fn declare_async(&self);
+
+ async fn async_fn(&self) {
+ self.declare_async().await
+ }
+}
+
+#[maybe_async(?Send)]
+pub trait PubTrait {
+ fn sync_fn() {}
+
+ async fn declare_async(&self);
+
+ async fn async_fn(&self) {
+ self.declare_async().await
+ }
+}
+
+#[maybe_async]
+pub(crate) trait PubCrateTrait {
+ fn sync_fn() {}
+
+ async fn declare_async(&self);
+
+ async fn async_fn(&self) {
+ self.declare_async().await
+ }
+}
+
+#[maybe_async(AFIT)]
+trait AfitTrait {
+ fn sync_fn_afit() {}
+
+ async fn declare_async_afit(&self);
+
+ async fn async_fn_afit(&self) {
+ self.declare_async_afit().await
+ }
+}
+
+#[maybe_async]
+async fn async_fn() {}
+
+#[maybe_async]
+pub async fn pub_async_fn() {}
+
+#[maybe_async]
+pub(crate) async fn pub_crate_async_fn() {}
+
+#[maybe_async]
+unsafe fn unsafe_fn() {}
+
+struct Struct;
+
+#[maybe_async]
+impl Struct {
+ fn sync_fn_inherent() {}
+
+ async fn declare_async_inherent(&self) {}
+
+ async fn async_fn_inherent(&self) {
+ async { self.declare_async_inherent().await }.await
+ }
+}
+
+#[maybe_async]
+impl Trait for Struct {
+ fn sync_fn() {}
+
+ async fn declare_async(&self) {}
+
+ async fn async_fn(&self) {
+ async { self.declare_async().await }.await
+ }
+}
+
+#[maybe_async(AFIT)]
+impl AfitTrait for Struct {
+ fn sync_fn_afit() {}
+
+ async fn declare_async_afit(&self) {}
+
+ async fn async_fn_afit(&self) {
+ async { self.declare_async_afit().await }.await
+ }
+}
+
+#[cfg(feature = "is_sync")]
+fn main() -> std::result::Result<(), ()> {
+ let s = Struct;
+ s.declare_async_inherent();
+ s.async_fn_inherent();
+ s.declare_async();
+ s.async_fn();
+ s.declare_async_afit();
+ s.async_fn_afit();
+ async_fn();
+ pub_async_fn();
+ Ok(())
+}
+
+#[cfg(not(feature = "is_sync"))]
+#[async_std::main]
+async fn main() {
+ let s = Struct;
+ s.declare_async_inherent().await;
+ s.async_fn_inherent().await;
+ s.declare_async().await;
+ s.async_fn().await;
+ s.declare_async_afit().await;
+ s.async_fn_afit().await;
+ async_fn().await;
+ pub_async_fn().await;
+}