extern crate deasync; #[deasync::deasync] async fn async_fn() {} #[deasync::deasync] pub async fn pub_async_fn() {} #[deasync::deasync] pub(crate) async fn pub_crate_async_fn() {} #[deasync::deasync] async unsafe fn async_unsafe_fn() {} #[deasync::deasync] pub trait PubTrait { async fn async_fn(&self); } #[deasync::deasync] pub(crate) trait PubCrateTrait { async fn async_fn(&self); } struct Struct; #[deasync::deasync] impl PubTrait for Struct { async fn async_fn(&self) { async_fn().await } } #[deasync::deasync] impl PubCrateTrait for Struct { async fn async_fn(&self) { async_fn().await } } #[test] fn test_async_fn() { async_fn(); pub_async_fn(); pub_crate_async_fn(); unsafe { async_unsafe_fn() }; let s = Struct; PubTrait::async_fn(&s); PubCrateTrait::async_fn(&s); }