This PR includes theses changes:
- Handling "optional" parameters is not optional anymore. Handling an additional parameter for it makes templates more complicated, and IMO, it is not worth it (as discussed in issue, it is an "acceptable" breaking change).
- Optional parameters are handled everywhere: path params, query params, form params... Generated sample code compiles (both hyper and reqwest libraries).
* Add support for the `discriminator` feature of OpenAPI 3, and implement it with `enum` in Rust
* Add all missing explicit `dyn` to trait types to remove warnings
* Add missing re-export for properties that are enum (was missing from #2244).
As we discovered in #3463, there are various bits of the rust client generator that are currently untested. This PR adds tests for various generator-specific types, and also files.
Follows the example of the rust-server generator for making it easy to add new test specs. This should make it easier for future contributors to make sure that their contributions are tested
* Fixes NPE when no outputDir is set
* Fix behaviors of default values for values not provided by user
* Easier handling of default behavior in settings.
* Fixes for dynamic config deserialization (specifically, ruby client sample fix)
* Tests for WorkflowSettings (defaults, modified defaults, nulls)
* Test modification of WorkflowSettings defaults for both class constructor and builder
It fails if the model contains a float, which don't implement Eq.
Fix for bug introduced in #3309.
We really need to improve the testing of the rust generator to catch this sort of mistake in future. I don't have time to do this now, though.
I already contributed proper enum supports a few weeks ago, but somehow missed actually using them when they're used as a property. This PR fixes that.
I also took the liberty of fixing a bunch of unused warnings.
* Make sure we use the enum types in Rust
* Fix unused warnings in Rust and regenerate samples
* Use crate:: import path that works both with Rust 2015 and 2018
* Derive PartialEq and Eq in generated Rust structs and enums
* Better Rust client imports.
* No more "unused_imports" in models for serde_json::Value.
* No more compilation problem for apis requiring serde_json::Value.
* "crate::" prefix for models and apis imports, for compatibility with Rust 2018 edition.
* Rust samples regeneration using new code.
* Add support for enum schemas and properties to the rust generator
Also:
* Skip serializing a field with serde if it's optional and empty
* Fix borrow checker error when using &std::path::Path (should be std::path::PathBuf)
* Add script to generate sample with rust-reqwest
* Regenerate petstore sample for both rust targets
* Remove go code from README.md
* Fix formatting of serde skip_serializing_if attribute
Rust clients code format cleanup (with some breaking changes for model structures):
* Application of Rust style in client files (4 spaces padding). Remove useless blank lines.
* Replace getters/setters in models by public fields.
* Add a trailing comma in struct fields.
* Sample Rust clients regeneration.
* Resolves#525 for Rust client generator with reqwest library.
* Use Reqwest "query" method to generate query URL.
* urlencode URL string parameters.
* Generate rust-reqwest client, and verify it compiles and work as intended.
* Map file params (to "&std::path::Path") and support multipart operations (with file params) in Reqwest library.
* Cleanup: template compression to remove unecessary blank lines in generated code.
* Revert "Disable rust-reqwest petstore test"
This reverts commit 9e1cce2e7b2fefa742c4992215c59998fb9fb311.
* Revert "Fix various CI issues (#1722)"
This reverts commit 77270a01183b3fb353113a709079213c87d00787.
* Revert "[Rust] Support formParams and fix list-params. (#1678)"
This reverts commit 4a494b45d306480d2bda671159ad02b35ebdf8d3.
* [Rust] Support formParams and fix list-params.
Form params were previously unsupported, and list-params would produce code that didn't compile.
* update rust samples
* Port of PR https://github.com/swagger-api/swagger-codegen/pull/8804.
* Correction of conflict with PR #528 (missing template file).
* Add rust-reqwest samples to Circle CI tests.
* Add integration test pom.xml file with launcher to trigger cargo execution.
* Deduplicate Maven project name.
* Fix "api_key" header for Petstore.
* Better API key management.
* Fix query param for lists of objects other than strings (numbers, etc.).
* Update to reqwest 0.9, and refactor of header management (using reqwest transition feature).
* Merge scripts generating rust-hyper and rust-reqwest samples.
* Consistent full stops.
* Use raw variables in all Rust mustache templates.
* Replace production build in CI with a quick simple check.
* Update samples.
* Finish Reqwest 0.9 migration (removing "hyper 0.11" transition feature).
* Configuration implements Default trait.
* API template reorganized: HashMap is not required anymore.
* Revert "Merge scripts generating rust-hyper and rust-reqwest samples."
This reverts commit 970f996566a740045f2a986fd70fc70f11952925.
* Remove deprecated "-XX:MaxPermSize" java arg.
* [Rust] Move request logic into standalone file
This reduces the number of variables which are used in the generated
operations, thus fixing #512.
This also fixed a TODO related to URI parsing errors.
Other than that, it is meant to be functionally identical.
* [Rust] Add support for non-file form params
Up until now, they just weren't there at all
* [Rust] Use more rustic terms in example
* update rust client with petstore oas2
* update rust with oas2 petstore, fix default value
* fix type mapping for file, update api_doc for rust client
* update rust client with oas3
Co-authored-by: Akihito Nakano <sora.akatsuki@gmail.com>
Co-authored-by: Jeremie Bresson <dev@jmini.fr>
Co-authored-by: Jim Schubert <james.schubert@gmail.com>
Co-authored-by: Martin Delille <martin@phonations.com>
Co-authored-by: Tomasz Prus <tomasz.prus@gmail.com>
Co-authored-by: William Cheng <wing328hk@gmail.com>
* [Rust] Consider error statuscodes to be errors
* [Rust] Introduce 'ApiError' type for 4xx/5xx resp
This updates the previous commit which added an 'ErrorStatus' variant to
an 'ApiError' variant.
It does not specialize the error to the specific possible error
responses yet, rather returning a 'serde_json::Value' for any case.
This will lose any error messages which cannot be parsed as json and
instead return a json-parse error.
A future change should update the generated signatures such that the
returned future's error type is specialized to the specific errors that
may be returned by that api (and possibly a catchall json::Value still).
* [Rust] Regenerate petstore samples
* [Rust] Add error example to petstore sample
* [Rust] Use serde Value for objects
This hopefully fixes the previous TODO; it at least fixes compilation
errors for the specific swagger model I'm working with.
* [Rust] Update Cargo.toml to specify versions
Letting the version float freely is scary, to say the least.
This gives it a better chance at being future-proof.
When the crate author had a recommended selector I picked that,
otherwise I went semver compatible.
* [Rust] Regenerate the example
* Use the right package name for the Rust crate.
* Change getters on models to return Option for non-required fields.
* Cleanup Rust generation and get example compiling again.
* Use underscore names for functions.
* add rust generator (1st release)
* update based on feedback
* fix reserved keyword
* fix string parameter
* Convert String to &str in trait definition
* Only pass pathParams to uri builder
* Fixed the html escaping in return type
* Fixed the hashmap constructor
* Added models into API scope
* removed models subimport, reference from super
* update returntype in method signature
* Fixed the remaining templates inconsistencies
* Fixed issues that floated up in kubernetes swagger file
* add hash support, fix docstring
* fix map parameter, update api.mustache
* use baseName for parameter
* use fully-qualfiied model name
* add rust tests
* fix test cases
* Rust gen slightly more idiomatic (#6247)
* Go -> Rust in README
* Remove leftover go file in rust sample
* rust: Regenerate sample
* rust: Rename *Impl -> *Client
* rust: one-line use line
More in line with common style
* rust: Replace tabs (in java) with 4 spaces
* Added trivial getter implementation (#6249)
* update rust petstore samples