1 #![allow(dead_code)] 2 3 use maybe_async::maybe_async; 4 5 #[maybe_async(Send)] 6 trait Trait { sync_fn()7 fn sync_fn() {} 8 declare_async(&self)9 async fn declare_async(&self); 10 async_fn(&self)11 async fn async_fn(&self) { 12 self.declare_async().await 13 } 14 } 15 16 #[maybe_async(?Send)] 17 pub trait PubTrait { sync_fn()18 fn sync_fn() {} 19 declare_async(&self)20 async fn declare_async(&self); 21 async_fn(&self)22 async fn async_fn(&self) { 23 self.declare_async().await 24 } 25 } 26 27 #[maybe_async] 28 pub(crate) trait PubCrateTrait { sync_fn()29 fn sync_fn() {} 30 declare_async(&self)31 async fn declare_async(&self); 32 async_fn(&self)33 async fn async_fn(&self) { 34 self.declare_async().await 35 } 36 } 37 38 #[maybe_async(AFIT)] 39 trait AfitTrait { sync_fn_afit()40 fn sync_fn_afit() {} 41 declare_async_afit(&self)42 async fn declare_async_afit(&self); 43 async_fn_afit(&self)44 async fn async_fn_afit(&self) { 45 self.declare_async_afit().await 46 } 47 } 48 49 #[maybe_async] async_fn()50async fn async_fn() {} 51 52 #[maybe_async] pub_async_fn()53pub async fn pub_async_fn() {} 54 55 #[maybe_async] pub_crate_async_fn()56pub(crate) async fn pub_crate_async_fn() {} 57 58 #[maybe_async] unsafe_fn()59unsafe fn unsafe_fn() {} 60 61 struct Struct; 62 63 #[maybe_async] 64 impl Struct { sync_fn_inherent()65 fn sync_fn_inherent() {} 66 declare_async_inherent(&self)67 async fn declare_async_inherent(&self) {} 68 async_fn_inherent(&self)69 async fn async_fn_inherent(&self) { 70 async { self.declare_async_inherent().await }.await 71 } 72 } 73 74 #[maybe_async] 75 impl Trait for Struct { sync_fn()76 fn sync_fn() {} 77 declare_async(&self)78 async fn declare_async(&self) {} 79 async_fn(&self)80 async fn async_fn(&self) { 81 async { self.declare_async().await }.await 82 } 83 } 84 85 #[maybe_async(AFIT)] 86 impl AfitTrait for Struct { sync_fn_afit()87 fn sync_fn_afit() {} 88 declare_async_afit(&self)89 async fn declare_async_afit(&self) {} 90 async_fn_afit(&self)91 async fn async_fn_afit(&self) { 92 async { self.declare_async_afit().await }.await 93 } 94 } 95 96 #[cfg(feature = "is_sync")] main() -> std::result::Result<(), ()>97fn main() -> std::result::Result<(), ()> { 98 let s = Struct; 99 s.declare_async_inherent(); 100 s.async_fn_inherent(); 101 s.declare_async(); 102 s.async_fn(); 103 s.declare_async_afit(); 104 s.async_fn_afit(); 105 async_fn(); 106 pub_async_fn(); 107 Ok(()) 108 } 109 110 #[cfg(not(feature = "is_sync"))] 111 #[async_std::main] main()112async fn main() { 113 let s = Struct; 114 s.declare_async_inherent().await; 115 s.async_fn_inherent().await; 116 s.declare_async().await; 117 s.async_fn().await; 118 s.declare_async_afit().await; 119 s.async_fn_afit().await; 120 async_fn().await; 121 pub_async_fn().await; 122 } 123