swagger-api / swagger-codegen

swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition.
http://swagger.io
Apache License 2.0
17.09k stars 6.03k forks source link

[Rust] Complex/optional parameter encodings are not handled correctly #8173

Open BartMassey opened 6 years ago

BartMassey commented 6 years ago
Description

I am dealing with a Swagger 2.0 API which needs to accept an optional parameter consisting of an unexploded comma-separated list of pipe-separated lists of values. The Rust mustache templates really don't handle any of this, so I can't use the generated code: it doesn't even compile.

Swagger-codegen version

Current git master, but seems to apply to all versions.

Swagger declaration file content or url

https://gist.github.com/BartMassey/b58a73520d5ca1b66a6486d4fb345fc6

Command line used for generation
java -jar swagger-codegen-cli.jar generate \
     -i swagger-params.json -l rust -o demo
Steps to reproduce

Generate the Rust API as described above. cd to demo/ and cargo build. Note that the code does not compile. Inspect the code to see that it is not generating anything usable for the parameter.

Related issues/PRs

See issues #8169 and #8171 for more information on my use case.

Suggest a fix/enhancement

rust/api.mustache needs to be expanded to handle the full set of parameter possibilities. I'm not quite sure how to do this, but I might give it a try at some point if I can't get help here.

bjgill commented 6 years ago

Thanks for the report. I've been able to reproduce with rust and rust-server.

It looks as if there are three problems:

BartMassey commented 6 years ago

I think rust's problem with nested lists is just a symptom of the collectionFormat problem. If the code generator understood the format of the expected list, it could do a reasonable job of gluing something together.