#[async_trait::async_trait] trait Interface { async fn do_trait(&self); } struct Thing; #[async_trait::async_trait] impl Interface for Thing { async fn do_trait(&self) { println!("hello from trait"); } } impl Thing { async fn do_direct(&self) { println!("hello from direct"); } } #[tokio::main] async fn main() { let thing = Thing {}; thing.do_trait(); thing.do_direct(); }