transport::server uses client_state in a move-temporary-around fashion. Having a setter that does continuation-bound validation makes this messier. Break them up to separate "this" placement from the actual validation continuation logic