However, writing the desugared version in the trait is still compatible with using async fn in the trait impl, so the "burden" is more on lib maintainers.
Also this problem only applies when the Self type is generic.
And Send is only required, if one decides to use a multithreaded rt.
I highly recommend the following article by @notgull about smol:
@notgull This is such a good blog post. I've learned a lot!
Thank you for sharing. ❤️
"The best part is that the allocation, the Vec<smol::Task<()>>, isn’t even necessary. It could be one-time allocation that is just extended to hold the tasks."
Wow, this is mind-blowing to me - I haven't even considered this before! 🤯