Skip to content

[Rust Server] Hyper 0.12 Support #4519

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jan 5, 2020
Merged

[Rust Server] Hyper 0.12 Support #4519

merged 2 commits into from
Jan 5, 2020

Conversation

richardwhiuk
Copy link
Contributor

@richardwhiuk richardwhiuk commented Nov 17, 2019

This is built on top of #4441

Currently targeting merge to master. I'm not sure what the breaking position is here - this may well need to go into 5.0.x instead Breaking, so going into 5.0.x

Changes:

  • Hyper upgraded to Hyper 0.12.

    • NewService becomes MakeService

    • Request on MakeContext is not parameterised - instead, ReqBody, and ResBody are parameterized, and must implement hyper::body::Payload.

      This means that our existing tuples (i.e. (Body, Context)) don't work - instead we have a type ContextualPayload, which implements Payload, and derefs to an inner payload (the body), and contains a context.

      This is handled by the work done in Hyper 0.12 support Metaswitch/swagger-rs#63 but has some fall out here as well.

    • tokio-proto/tokio-core is no longer supported, and hyper instead depends on tokio.

    • Hyper depends on mime 0.3, but multipart depends on mime 0.2, so we now import both

  • Hyper TLS 0.2 and native-tls 0.1

    We don't upgrade to Hyper TLS 0.3 in this MR, that'll happen in a future one.

  • Use Swagger Support library 3.x

  • Futures are now Send. This forces ApiImpl to be need to Send as a result, and all forces Clients to be Send + Sync.

  • We move to modern(ish) conventions, and get rid of all bunch of extern crate shenanigans, and move it into src/lib.rs. We try and sanitize the lib.rs / Cargo.toml while here. Note, this doesn't move the crate to 2018, that'll happen in a future MR

  • We move a multipart helper function to swagger-rs, which is the home for all large blocks of code, as it's easier to maintain.

Rust Technical Committee

@frol, @farcaller, @bjgill

@dbcfd You may find it useful to build on top of this.

PR checklist

  • Read the contribution guidelines.
  • If contributing template-only or documentation-only changes which will change sample output, build the project before.
  • Run the shell script(s) under ./bin/ (or Windows batch scripts under.\bin\windows) to update Petstore samples related to your fix. This is important, as CI jobs will verify all generator outputs of your HEAD commit, and these must match the expectations made by your contribution. You only need to run ./bin/{LANG}-petstore.sh, ./bin/openapi3/{LANG}-petstore.sh if updating the code or mustache templates for a language ({LANG}) (e.g. php, ruby, python, etc).
  • File the PR against the correct branch: master, 4.3.x, 5.0.x. Default: master.
  • Copy the technical committee to review the pull request if your PR is targeting a particular programming language.

@richardwhiuk
Copy link
Contributor Author

This change is now clean, and ready to merge into 5.0.x.

There's a significant number of changes blocked behind this, so I expect to merge this in the next week.

@richardwhiuk richardwhiuk merged commit e945912 into OpenAPITools:5.0.x Jan 5, 2020
@richardwhiuk richardwhiuk deleted the rust-hyper-0-12 branch January 5, 2020 14:48
@wing328
Copy link
Member

wing328 commented Jan 20, 2020

@richardwhiuk I've sync'd changes from master to 5.0.x and resolved some merge conflicts related to the Rust generator. Please review the latest code in the 5.0.x branch to see if the merge looks good to you.

@richardwhiuk
Copy link
Contributor Author

@wing328 Looks good, thanks!

@UkonnRa
Copy link
Contributor

UkonnRa commented Jan 30, 2020

Hi, I wonder if I can use this feature right now with v4.2.x? Or should I have to wait until the 5.x release?

@richardwhiuk
Copy link
Contributor Author

It's not available in 4.x, It's available in the 5.x snapshots only, as it's a breaking change to the Rust generated code.

@wing328 wing328 added this to the 4.2.3 milestone Jan 31, 2020
@richardwhiuk richardwhiuk modified the milestones: 4.2.3, 5.0.0 Feb 1, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants