async_trait
Rust chưa hỗ trợ async
cho trait. Trait dưới đây sẽ báo lỗi:
#![allow(unused)] fn main() { trait MyTrait { async fn f() {} } }
error[E0706]: trait fns cannot be declared `async`
--> src/main.rs:4:5
|
4 | async fn f() {}
| ^^^^^^^^^^^^^^^
async_trait
cung cấp attribute macro để giúp async có thể hoạt động với trait.
File: Cargo.toml
[dependencies]
async_trait = "0.1"
Ví dụ:
#![allow(unused)] fn main() { use async_trait::async_trait; #[async_trait] trait Advertisement { async fn run(&self); } struct Modal; #[async_trait] impl Advertisement for Modal { async fn run(&self) { self.render_fullscreen().await; for _ in 0..4u16 { remind_user_to_join_mailing_list().await; } self.hide_for_now().await; } } struct AutoplayingVideo { media_url: String, } #[async_trait] impl Advertisement for AutoplayingVideo { async fn run(&self) { let stream = connect(&self.media_url).await; stream.play().await; // Video probably persuaded user to join our mailing list! Modal.run().await; } } }