In short, it still feels like a leaky abstraction: marvelous to look at working code, but errors (both compile and run-time) expose the underlying machinery underneath the syntactical sugar.
This is probably heresy, but as a former Rust dev I'm enjoying web-services in Go more these days.
Rust was not made for web development, and the fact that people keep creating frameworks and keep deciding they are good only shows how bad the usual practices are around the web.
And where you also need the fine grained control that Rust provides.
E.g. halting all async tasks immediately while keeping a single core free to execute a trade as fast a possible.
There never was any problem scaling things at the application layer. You can use almost any architecture there without issues. All the bottlenecks are elsewhere.
You will often encounter many other bottlenecks that hold your system back. There are other concerns like latency and utilization to care about. But assuming a purely "compute/IO" driven data plane, yes, you can scale synchronous APIs with threading quite far.
It's just a pool of threads being used on demand.
The source of "complexity" according to the author is in using traits to make sure the middlewares are defined correctly.