I just ran into the wonderful error message
the trait is not dyn compatible because method
publish_videoisasync
and boy, what a rabbit hole. I found out about async_trait which resolves this by turning async methods into fn method() -> Pin<Box<dyn Future + Send + 'async_trait>>, but I thought that’s what the async fn was syntax sugar for??? Then I ran into this member-only medium post claiming
Rust Async Traits: What Finally Works Now
Async functions in traits shipped. Here’s what that means for your service interfaces.
But I clicked through every rust release since 1.75.0 where impl AsyncTrait was shipped and couldn’t find a mention of async. Now I’m just confused (and still using async_trait). Hence the question above…


I’m not informed on all the details, but a key difference between the
async_traitmacro and a native async keyword is thatasync_traitgives you that boxed, trait object type. IIUC the thinking is native support should not automatically box futures, which implies it shouldn’t usedyneither. UsingBoxanddynis an easy way to make sure the code works no matter what type of future a method returns. But the trade-off is some runtime overhead from heap allocation (due toBox), and dynamic dispatch (due todyn).According to areweasyncyet.rs: