Skip to content
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

[Rust Server] Support header objects #5337

Merged

Conversation

richardwhiuk
Copy link
Contributor

@richardwhiuk richardwhiuk commented Feb 16, 2020

Previously, object types present in Headers would fail to compile with errors of the form:

cargo build
   Compiling openapi-v3 v1.0.7 (/data/developer/swagger-codegen/samples/server/petstore/rust-server/output/openapi-v3)
error[E0277]: the trait bound `swagger::IntoHeaderValue<models::ObjectHeader>: std::convert::From<hyper::header::HeaderValue>` is not satisfied
   --> output/openapi-v3/src/client/mod.rs:697:22
    |
697 |     object_header: (*Into::<swagger::IntoHeaderValue<models::ObjectHeader>>::into(response_object_header)).clone(),
    |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::convert::From<hyper::header::HeaderValue>` is not implemented for `swagger::IntoHeaderValue<models::ObjectHeader>`
    |
    = help: the following implementations were found:
              <swagger::IntoHeaderValue<chrono::DateTime<chrono::Utc>> as std::convert::From<hyper::header::HeaderValue>>
              <swagger::IntoHeaderValue<i16> as std::convert::From<hyper::header::HeaderValue>>
              <swagger::IntoHeaderValue<i32> as std::convert::From<hyper::header::HeaderValue>>
              <swagger::IntoHeaderValue<i64> as std::convert::From<hyper::header::HeaderValue>>
            and 7 others
    = note: required because of the requirements on the impl of `std::convert::Into<swagger::IntoHeaderValue<models::ObjectHeader>>` for `hyper::header::HeaderValue`
    = note: required by `std::convert::Into::into`

This work adds support for objects in headers. It was necessary to move the definition of IntoHeaderValue from the swagger crate to being part of the auto-generated code so that we could convert between IntoHeaderValue and hyper::HeaderValue for models defined by the API.

It also adds tests to ensure this continues to work.

Rust Technical Committee

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.

Support operations with objects in the header
@richardwhiuk richardwhiuk added this to the 5.0.0 milestone Feb 16, 2020
@richardwhiuk
Copy link
Contributor Author

richardwhiuk commented Feb 22, 2020

Python Generator is broken in Travis due to spec-first/connexion#1149 - this is tracked by #5235 and commented out in master.

@richardwhiuk richardwhiuk merged commit 71f5320 into OpenAPITools:5.0.x Feb 22, 2020
alexsuperdev added a commit to alexsuperdev/openapi-generator that referenced this pull request Mar 15, 2020
catch NPE if no OneOf Schemas is setted. merged from 5.0 branch

[Rust Server] Support header objects (OpenAPITools#5337)

[Rust Server] Support header objects

Support operations with objects in the header

[Rust Server] Support objects as query parameters (OpenAPITools#5338)

- Support objects as query parameters
- Update samples

 [Rust Server] Add support for untyped properties and models (OpenAPITools#5339)

* [Rust Server] Add support for untyped properties
* [Rust Server] Improve support for untyped data
* Update samples

[Rust Server] Support RFC 7807 (OpenAPITools#5407)

* Support RFC 7807 - Problem Details for HTTP APIs
* Add test for RFC 7807
* Update samples

[Rust Server] Nullable fixes (OpenAPITools#5408)

* [Rust Server] Nullable fixes
* [Rust Server] Add tests for nullable cases
* Update samples

[Rust Server] Handle numeric response description (OpenAPITools#5452)

* [Rust Server] Handle response descriptions which start with a number.
* [Rust Server] Add test for numeric response descriptions
* Update samples

[Rust Server] Support numeric operation IDs (OpenAPITools#5453)

* [Rust Server] Support operation IDs which begin with a number
* [Rust Server] Add test for a numeric operation ID
* Update samples

[Rust Server] Support RFC 7386 (OpenAPITools#5454)

* [Rust Server] Support RFC 7386

Support application/merge-patch+json as defined by RFC 7386 -
https://tools.ietf.org/html/rfc7386

Handle exactly the same as application/json.

* [Rust Server] Add test for RFC 7386

* Update samples

[Rust Server] Suffix reserved words with _ (OpenAPITools#5455)

* [Rust Server] Suffix reserved words with _

Suffix reserved words with an underscore instead of prefixing them.

This follows convention in the Rust community, as prefixing with an underscore
indicates an unused variable in Rust.

* Update samples

[Rust Server] Don't change API version (OpenAPITools#5458)

Don't change the API version which is exposed in `crate::API_VERSION`.

- If the API version isn't set, we don't expose it.

- If it is set, we leave it well alone.

- Always pass a package version:
 - Pass in the passed package version by preference
 - Pass in the API version if it's not.
   - If the API version isn't set, we use 1.0.0
   - If it is set, and isn't a valid semver, we append .0 such that we have
     something with three digits (so that an API version of 1 works).

[Rust Server] Support OpenAPI v3 callbacks (OpenAPITools#5405)

* [Rust Server] Support Callbacks

* [Rust Server] Support callbacks in the examples

* [Rust Server] Update features documentation

* [Rust Server] Mark as supporting callbacks

* Update samples

* [Rust Server] Add tests for callbacks

* [Rust Server] Fix README

Don't suggest examples which don't exist

[Rust Server] Test allOf objects including base properties (OpenAPITools#5457)

* [Rust Server] Add operationIds for rust-server-test

* [Rust Server] Add test for allOf

* Update samples

[Rust Server] Make parse error Display-able (OpenAPITools#5490)

* [Rust Server] Make parse error displayable

  Change error type to be displayable to prevent compile errors

* [Rust Server] Add test for enum in path

* Update samples
@richardwhiuk richardwhiuk deleted the rust-server-header-objects branch June 2, 2024 11:12
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.

None yet

1 participant