Sweet, this is basically how I design my protocol implementations in rust as well.

Way more testable, the bulk can be shared between async and blocking IO, it's a lot easier to completely ban unsafe in your dependencies (excepting std and core), etc.