[rust-server] asynchronous support via hyper v0.11 #7896
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR checklist
./bin/
to update Petstore sample so that CIs can verify the change. (For instance, only need to run./bin/{LANG}-petstore.sh
and./bin/security/{LANG}-petstore.sh
if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in.\bin\windows\
.3.0.0
branch for changes related to OpenAPI spec 3.0. Default:master
.Description
This PR moves
rust-server
from hyper v0.10 to v0.11. This has the effect of allowingrust-server
to use asynchronous I/O. I'm raising this on behalf of @mirw (see #6756 (comment)).See https://tokio.rs/ for more information about tokio, the async Rust framework that we are using here. Tokio is the current focus of the Rust communities efforts around async.
Non back-compatible changes:
Client
is no longerSend + Sync
Api
implementations used byServer
are no longer expected to beSend + Sync
(which is good, because it's quite hard ifClient
isn't)Client
s andServer
s, and hook them into hyper or tokio is different.Importantly, though, the business logic itself should be unchanged. See the sample client and server for examples of how one could migrate existing code.
This PR will also unblock some of the work in #7600.
Testing
We've been using this in production for several months now. We discovered (and fixed) a bug where both body and query parameters were present - the new
/fake/body-with-query-params
endpoint in the test swagger spec ensures we don't regress this in future.