use async_trait::async_trait; struct A; struct B; #[async_trait] pub trait Trait<'r> { async fn method(&'r self); } #[async_trait] impl Trait for A { async fn method(&self) {} } #[async_trait] impl<'r> Trait<'r> for B { async fn method(&self) {} } #[async_trait] pub trait Trait2 { async fn method<'r>(&'r self); } #[async_trait] impl Trait2 for A { async fn method(&self) {} } #[async_trait] impl<'r> Trait2<'r> for B { async fn method(&'r self) {} } fn main() {}