forked from loafle/openapi-generator-original
[Rust] rename rust2 to rust-server (#6747)
* rename rust2 to rust-server * update rust-server batch file to use petstore test spec
This commit is contained in:
parent
3472c68e0b
commit
f0b7daeec6
@ -25,7 +25,7 @@
|
|||||||
This is the swagger codegen project, which allows generation of API client libraries (SDK generation), server stubs and documentation automatically given an [OpenAPI Spec](https://github.com/OAI/OpenAPI-Specification). Currently, the following languages/frameworks are supported:
|
This is the swagger codegen project, which allows generation of API client libraries (SDK generation), server stubs and documentation automatically given an [OpenAPI Spec](https://github.com/OAI/OpenAPI-Specification). Currently, the following languages/frameworks are supported:
|
||||||
|
|
||||||
- **API clients**: **ActionScript**, **Ada**, **Apex**, **Bash**, **C#** (.net 2.0, 4.0 or later), **C++** (cpprest, Qt5, Tizen), **Clojure**, **Dart**, **Elixir**, **Eiffel**, **Go**, **Groovy**, **Haskell** (http-client, Servant), **Java** (Jersey1.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy, Vertx), **Kotlin**, **Lua**, **Node.js** (ES5, ES6, AngularJS with Google Closure Compiler annotations) **Objective-C**, **Perl**, **PHP**, **PowerShell**, **Python**, **R**, **Ruby**, **Rust**, **Scala** (akka, http4s, swagger-async-httpclient), **Swift** (2.x, 3.x, 4.x), **Typescript** (Angular1.x, Angular2.x, Fetch, jQuery, Node)
|
- **API clients**: **ActionScript**, **Ada**, **Apex**, **Bash**, **C#** (.net 2.0, 4.0 or later), **C++** (cpprest, Qt5, Tizen), **Clojure**, **Dart**, **Elixir**, **Eiffel**, **Go**, **Groovy**, **Haskell** (http-client, Servant), **Java** (Jersey1.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy, Vertx), **Kotlin**, **Lua**, **Node.js** (ES5, ES6, AngularJS with Google Closure Compiler annotations) **Objective-C**, **Perl**, **PHP**, **PowerShell**, **Python**, **R**, **Ruby**, **Rust**, **Scala** (akka, http4s, swagger-async-httpclient), **Swift** (2.x, 3.x, 4.x), **Typescript** (Angular1.x, Angular2.x, Fetch, jQuery, Node)
|
||||||
- **Server stubs**: **C#** (ASP.NET Core, NancyFx), **C++** (Pistache, Restbed), **Erlang**, **Go**, **Haskell** (Servant), **Java** (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, RestEasy, Play Framework), **PHP** (Lumen, Slim, Silex, [Symfony](https://symfony.com/), [Zend Expressive](https://github.com/zendframework/zend-expressive)), **Python** (Flask), **NodeJS**, **Ruby** (Sinatra, Rails5), **Scala** ([Finch](https://github.com/finagle/finch), Scalatra)
|
- **Server stubs**: **C#** (ASP.NET Core, NancyFx), **C++** (Pistache, Restbed), **Erlang**, **Go**, **Haskell** (Servant), **Java** (MSF4J, Spring, Undertow, JAX-RS: CDI, CXF, Inflector, RestEasy, Play Framework), **PHP** (Lumen, Slim, Silex, [Symfony](https://symfony.com/), [Zend Expressive](https://github.com/zendframework/zend-expressive)), **Python** (Flask), **NodeJS**, **Ruby** (Sinatra, Rails5), **Rust**, **Scala** ([Finch](https://github.com/finagle/finch), Scalatra)
|
||||||
- **API documentation generators**: **HTML**, **Confluence Wiki**
|
- **API documentation generators**: **HTML**, **Confluence Wiki**
|
||||||
- **Configuration files**: [**Apache2**](https://httpd.apache.org/)
|
- **Configuration files**: [**Apache2**](https://httpd.apache.org/)
|
||||||
- **Others**: **JMeter**
|
- **Others**: **JMeter**
|
||||||
|
@ -26,6 +26,6 @@ fi
|
|||||||
|
|
||||||
# if you've executed sbt assembly previously it will use that instead.
|
# if you've executed sbt assembly previously it will use that instead.
|
||||||
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
|
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties"
|
||||||
ags="$@ generate -t modules/swagger-codegen/src/main/resources/rust2 -i modules/swagger-codegen/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -l rust2 -o samples/client/petstore/rust2 -DpackageName=petstore_api"
|
ags="$@ generate -t modules/swagger-codegen/src/main/resources/rust-server -i modules/swagger-codegen/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -l rust-server -o samples/server/petstore/rust-server -DpackageName=petstore_api"
|
||||||
|
|
||||||
java $JAVA_OPTS -jar $executable $ags
|
java $JAVA_OPTS -jar $executable $ags
|
10
bin/windows/rust-server-petstore.bat
Executable file
10
bin/windows/rust-server-petstore.bat
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
set executable=.\modules\swagger-codegen-cli\target\swagger-codegen-cli.jar
|
||||||
|
|
||||||
|
If Not Exist %executable% (
|
||||||
|
mvn clean package
|
||||||
|
)
|
||||||
|
|
||||||
|
REM set JAVA_OPTS=%JAVA_OPTS% -Xmx1024M -DloggerPath=conf/log4j.properties
|
||||||
|
set ags=generate -i modules\swagger-codegen\src\test\resources\2_0\petstore-with-fake-endpoints-models-for-testing.yaml -l rust-server -o samples\server\petstore\rust-server
|
||||||
|
|
||||||
|
java %JAVA_OPTS% -jar %executable% %ags%
|
@ -27,25 +27,25 @@ import java.util.*;
|
|||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
public class Rust2Codegen extends DefaultCodegen implements CodegenConfig {
|
public class RustServerCodegen extends DefaultCodegen implements CodegenConfig {
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(Rust2Codegen.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(RustServerCodegen.class);
|
||||||
|
|
||||||
private HashMap<String, String> modelXmlNames = new HashMap<String, String>();
|
private HashMap<String, String> modelXmlNames = new HashMap<String, String>();
|
||||||
|
|
||||||
protected String apiVersion = "1.0.0";
|
protected String apiVersion = "1.0.0";
|
||||||
protected int serverPort = 8080;
|
protected int serverPort = 8080;
|
||||||
protected String projectName = "swagger-server";
|
protected String projectName = "swagger-server";
|
||||||
protected String apiPath = "rust2";
|
protected String apiPath = "rust-server";
|
||||||
protected String packageName;
|
protected String packageName;
|
||||||
protected String packageVersion;
|
protected String packageVersion;
|
||||||
protected String externCrateName;
|
protected String externCrateName;
|
||||||
|
|
||||||
public Rust2Codegen() {
|
public RustServerCodegen() {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
// set the output folder here
|
// set the output folder here
|
||||||
outputFolder = "generated-code/rust2";
|
outputFolder = "generated-code/rust-server";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Models. You can write model files using the modelTemplateFiles map.
|
* Models. You can write model files using the modelTemplateFiles map.
|
||||||
@ -66,7 +66,7 @@ public class Rust2Codegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
* Template Location. This is the location which templates will be read from. The generator
|
* Template Location. This is the location which templates will be read from. The generator
|
||||||
* will use the resource stream to attempt to read the templates.
|
* will use the resource stream to attempt to read the templates.
|
||||||
*/
|
*/
|
||||||
embeddedTemplateDir = templateDir = "rust2";
|
embeddedTemplateDir = templateDir = "rust-server";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Reserved words. Override this with reserved words specific to your language
|
* Reserved words. Override this with reserved words specific to your language
|
||||||
@ -232,7 +232,7 @@ public class Rust2Codegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return "rust2";
|
return "rust-server";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -243,7 +243,7 @@ public class Rust2Codegen extends DefaultCodegen implements CodegenConfig {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String getHelp() {
|
public String getHelp() {
|
||||||
return "Generates a Rust client/server library using the swagger-codegen project.";
|
return "Generates a Rust client/server library (beta) using the swagger-codegen project.";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
@ -55,8 +55,8 @@ io.swagger.codegen.languages.RClientCodegen
|
|||||||
io.swagger.codegen.languages.Rails5ServerCodegen
|
io.swagger.codegen.languages.Rails5ServerCodegen
|
||||||
io.swagger.codegen.languages.RestbedCodegen
|
io.swagger.codegen.languages.RestbedCodegen
|
||||||
io.swagger.codegen.languages.RubyClientCodegen
|
io.swagger.codegen.languages.RubyClientCodegen
|
||||||
io.swagger.codegen.languages.Rust2Codegen
|
|
||||||
io.swagger.codegen.languages.RustClientCodegen
|
io.swagger.codegen.languages.RustClientCodegen
|
||||||
|
io.swagger.codegen.languages.RustServerCodegen
|
||||||
io.swagger.codegen.languages.ScalaClientCodegen
|
io.swagger.codegen.languages.ScalaClientCodegen
|
||||||
io.swagger.codegen.languages.ScalatraServerCodegen
|
io.swagger.codegen.languages.ScalatraServerCodegen
|
||||||
io.swagger.codegen.languages.ScalazClientCodegen
|
io.swagger.codegen.languages.ScalazClientCodegen
|
||||||
|
@ -13,7 +13,7 @@ To see how to make this your own, look here:
|
|||||||
[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md)
|
[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md)
|
||||||
|
|
||||||
- API version: 1.0.0
|
- API version: 1.0.0
|
||||||
- Build date: 2017-09-26T16:36:55.563+01:00
|
- Build date: 2017-10-19T17:45:37.995+08:00
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
@ -50,6 +50,7 @@ cargo run --example client FakeOuterStringSerialize
|
|||||||
cargo run --example client TestClientModel
|
cargo run --example client TestClientModel
|
||||||
cargo run --example client TestEndpointParameters
|
cargo run --example client TestEndpointParameters
|
||||||
cargo run --example client TestEnumParameters
|
cargo run --example client TestEnumParameters
|
||||||
|
cargo run --example client TestInlineAdditionalProperties
|
||||||
cargo run --example client TestJsonFormData
|
cargo run --example client TestJsonFormData
|
||||||
cargo run --example client TestClassname
|
cargo run --example client TestClassname
|
||||||
cargo run --example client AddPet
|
cargo run --example client AddPet
|
@ -10,7 +10,7 @@ info:
|
|||||||
contact:
|
contact:
|
||||||
email: "apiteam@swagger.io"
|
email: "apiteam@swagger.io"
|
||||||
license:
|
license:
|
||||||
name: "Apache 2.0"
|
name: "Apache-2.0"
|
||||||
url: "http://www.apache.org/licenses/LICENSE-2.0.html"
|
url: "http://www.apache.org/licenses/LICENSE-2.0.html"
|
||||||
host: "petstore.swagger.io:80"
|
host: "petstore.swagger.io:80"
|
||||||
basePath: "/v2"
|
basePath: "/v2"
|
||||||
@ -54,7 +54,7 @@ paths:
|
|||||||
refName: "Pet"
|
refName: "Pet"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "???"
|
example: "???"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "ADD_PET"
|
uppercase_operation_id: "ADD_PET"
|
||||||
consumesXml: true
|
consumesXml: true
|
||||||
responses:
|
responses:
|
||||||
@ -95,7 +95,7 @@ paths:
|
|||||||
refName: "Pet"
|
refName: "Pet"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "???"
|
example: "???"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "UPDATE_PET"
|
uppercase_operation_id: "UPDATE_PET"
|
||||||
consumesXml: true
|
consumesXml: true
|
||||||
responses:
|
responses:
|
||||||
@ -450,7 +450,7 @@ paths:
|
|||||||
refName: "Order"
|
refName: "Order"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "???"
|
example: "???"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "PLACE_ORDER"
|
uppercase_operation_id: "PLACE_ORDER"
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
@ -568,7 +568,7 @@ paths:
|
|||||||
refName: "User"
|
refName: "User"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "???"
|
example: "???"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "CREATE_USER"
|
uppercase_operation_id: "CREATE_USER"
|
||||||
responses:
|
responses:
|
||||||
default:
|
default:
|
||||||
@ -602,7 +602,7 @@ paths:
|
|||||||
$ref: "#/definitions/User"
|
$ref: "#/definitions/User"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "&Vec::new()"
|
example: "&Vec::new()"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "CREATE_USERS_WITH_ARRAY_INPUT"
|
uppercase_operation_id: "CREATE_USERS_WITH_ARRAY_INPUT"
|
||||||
responses:
|
responses:
|
||||||
default:
|
default:
|
||||||
@ -635,7 +635,7 @@ paths:
|
|||||||
$ref: "#/definitions/User"
|
$ref: "#/definitions/User"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "&Vec::new()"
|
example: "&Vec::new()"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "CREATE_USERS_WITH_LIST_INPUT"
|
uppercase_operation_id: "CREATE_USERS_WITH_LIST_INPUT"
|
||||||
responses:
|
responses:
|
||||||
default:
|
default:
|
||||||
@ -787,7 +787,7 @@ paths:
|
|||||||
refName: "User"
|
refName: "User"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "???"
|
example: "???"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "UPDATE_USER"
|
uppercase_operation_id: "UPDATE_USER"
|
||||||
responses:
|
responses:
|
||||||
400:
|
400:
|
||||||
@ -856,7 +856,7 @@ paths:
|
|||||||
refName: "Client"
|
refName: "Client"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "???"
|
example: "???"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "TEST_CLASSNAME"
|
uppercase_operation_id: "TEST_CLASSNAME"
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
@ -1169,7 +1169,7 @@ paths:
|
|||||||
refName: "Client"
|
refName: "Client"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "???"
|
example: "???"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "TEST_CLIENT_MODEL"
|
uppercase_operation_id: "TEST_CLIENT_MODEL"
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
@ -1202,7 +1202,7 @@ paths:
|
|||||||
refName: "OuterNumber"
|
refName: "OuterNumber"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "None"
|
example: "None"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "FAKE_OUTER_NUMBER_SERIALIZE"
|
uppercase_operation_id: "FAKE_OUTER_NUMBER_SERIALIZE"
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
@ -1234,7 +1234,7 @@ paths:
|
|||||||
refName: "OuterString"
|
refName: "OuterString"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "None"
|
example: "None"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "FAKE_OUTER_STRING_SERIALIZE"
|
uppercase_operation_id: "FAKE_OUTER_STRING_SERIALIZE"
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
@ -1266,7 +1266,7 @@ paths:
|
|||||||
refName: "OuterBoolean"
|
refName: "OuterBoolean"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "None"
|
example: "None"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "FAKE_OUTER_BOOLEAN_SERIALIZE"
|
uppercase_operation_id: "FAKE_OUTER_BOOLEAN_SERIALIZE"
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
@ -1298,7 +1298,7 @@ paths:
|
|||||||
refName: "OuterComposite"
|
refName: "OuterComposite"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "None"
|
example: "None"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "FAKE_OUTER_COMPOSITE_SERIALIZE"
|
uppercase_operation_id: "FAKE_OUTER_COMPOSITE_SERIALIZE"
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
@ -1365,7 +1365,6 @@ paths:
|
|||||||
uppercase_message: "SUCCESS"
|
uppercase_message: "SUCCESS"
|
||||||
uppercase_data_type: "XMLOBJECT"
|
uppercase_data_type: "XMLOBJECT"
|
||||||
producesXml: true
|
producesXml: true
|
||||||
has_namespace: "true"
|
|
||||||
operation_id: "get_xml_features"
|
operation_id: "get_xml_features"
|
||||||
uppercase_operation_id: "GET_XML_FEATURES"
|
uppercase_operation_id: "GET_XML_FEATURES"
|
||||||
path: "/fake/xmlFeatures"
|
path: "/fake/xmlFeatures"
|
||||||
@ -1388,8 +1387,7 @@ paths:
|
|||||||
refName: "xmlObject"
|
refName: "xmlObject"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "???"
|
example: "???"
|
||||||
has_namespace: "true"
|
model_key: "OuterBoolean"
|
||||||
model_key: "itemList"
|
|
||||||
uppercase_operation_id: "POST_XML_FEATURES"
|
uppercase_operation_id: "POST_XML_FEATURES"
|
||||||
consumesXml: true
|
consumesXml: true
|
||||||
responses:
|
responses:
|
||||||
@ -1403,6 +1401,41 @@ paths:
|
|||||||
HttpMethod: "Post"
|
HttpMethod: "Post"
|
||||||
httpmethod: "post"
|
httpmethod: "post"
|
||||||
noClientExample: true
|
noClientExample: true
|
||||||
|
/fake/inline-additionalProperties:
|
||||||
|
post:
|
||||||
|
tags:
|
||||||
|
- "fake"
|
||||||
|
summary: "test inline additionalProperties"
|
||||||
|
description: ""
|
||||||
|
operationId: "testInlineAdditionalProperties"
|
||||||
|
consumes:
|
||||||
|
- "application/json"
|
||||||
|
parameters:
|
||||||
|
- in: "body"
|
||||||
|
name: "param"
|
||||||
|
description: "request body"
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: "object"
|
||||||
|
additionalProperties:
|
||||||
|
type: "string"
|
||||||
|
upperCaseName: "PARAM"
|
||||||
|
refName: null
|
||||||
|
formatString: "{:?}"
|
||||||
|
example: "???"
|
||||||
|
model_key: "OuterBoolean"
|
||||||
|
uppercase_operation_id: "TEST_INLINE_ADDITIONAL_PROPERTIES"
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: "successful operation"
|
||||||
|
uppercase_operation_id: "TEST_INLINE_ADDITIONAL_PROPERTIES"
|
||||||
|
uppercase_message: "SUCCESSFUL_OPERATION"
|
||||||
|
operation_id: "test_inline_additional_properties"
|
||||||
|
uppercase_operation_id: "TEST_INLINE_ADDITIONAL_PROPERTIES"
|
||||||
|
path: "/fake/inline-additionalProperties"
|
||||||
|
HttpMethod: "Post"
|
||||||
|
httpmethod: "post"
|
||||||
|
noClientExample: true
|
||||||
/another-fake/dummy:
|
/another-fake/dummy:
|
||||||
patch:
|
patch:
|
||||||
tags:
|
tags:
|
||||||
@ -1425,7 +1458,7 @@ paths:
|
|||||||
refName: "Client"
|
refName: "Client"
|
||||||
formatString: "{:?}"
|
formatString: "{:?}"
|
||||||
example: "???"
|
example: "???"
|
||||||
model_key: "itemList"
|
model_key: "OuterBoolean"
|
||||||
uppercase_operation_id: "TEST_SPECIAL_TAGS"
|
uppercase_operation_id: "TEST_SPECIAL_TAGS"
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
@ -1968,15 +2001,6 @@ definitions:
|
|||||||
- "approved"
|
- "approved"
|
||||||
- "delivered"
|
- "delivered"
|
||||||
upperCaseName: "OUTERENUM"
|
upperCaseName: "OUTERENUM"
|
||||||
OuterNumber:
|
|
||||||
type: "number"
|
|
||||||
upperCaseName: "OUTERNUMBER"
|
|
||||||
OuterString:
|
|
||||||
type: "string"
|
|
||||||
upperCaseName: "OUTERSTRING"
|
|
||||||
OuterBoolean:
|
|
||||||
type: "boolean"
|
|
||||||
upperCaseName: "OUTERBOOLEAN"
|
|
||||||
OuterComposite:
|
OuterComposite:
|
||||||
type: "object"
|
type: "object"
|
||||||
properties:
|
properties:
|
||||||
@ -1991,30 +2015,15 @@ definitions:
|
|||||||
my_number: {}
|
my_number: {}
|
||||||
my_boolean: {}
|
my_boolean: {}
|
||||||
upperCaseName: "OUTERCOMPOSITE"
|
upperCaseName: "OUTERCOMPOSITE"
|
||||||
xmlObject:
|
OuterNumber:
|
||||||
required:
|
type: "number"
|
||||||
- "itemList"
|
upperCaseName: "OUTERNUMBER"
|
||||||
- "name"
|
OuterString:
|
||||||
properties:
|
|
||||||
name:
|
|
||||||
type: "string"
|
type: "string"
|
||||||
example: "myXmlObject"
|
upperCaseName: "OUTERSTRING"
|
||||||
itemList:
|
OuterBoolean:
|
||||||
$ref: "#/definitions/itemList"
|
type: "boolean"
|
||||||
itemXmlName: "item"
|
upperCaseName: "OUTERBOOLEAN"
|
||||||
xml:
|
|
||||||
name: "group"
|
|
||||||
namespace: "http://example.com/schema.xsd"
|
|
||||||
upperCaseName: "XMLOBJECT"
|
|
||||||
itemList:
|
|
||||||
type: "array"
|
|
||||||
items:
|
|
||||||
type: "string"
|
|
||||||
example: "my item"
|
|
||||||
xml:
|
|
||||||
name: "item"
|
|
||||||
upperCaseName: "ITEMLIST"
|
|
||||||
itemXmlName: "item"
|
|
||||||
externalDocs:
|
externalDocs:
|
||||||
description: "Find out more about Swagger"
|
description: "Find out more about Swagger"
|
||||||
url: "http://swagger.io"
|
url: "http://swagger.io"
|
@ -24,6 +24,7 @@ use petstore_api::{ApiNoContext, ContextWrapperExt,
|
|||||||
TestClientModelResponse,
|
TestClientModelResponse,
|
||||||
TestEndpointParametersResponse,
|
TestEndpointParametersResponse,
|
||||||
TestEnumParametersResponse,
|
TestEnumParametersResponse,
|
||||||
|
TestInlineAdditionalPropertiesResponse,
|
||||||
TestJsonFormDataResponse,
|
TestJsonFormDataResponse,
|
||||||
TestClassnameResponse,
|
TestClassnameResponse,
|
||||||
AddPetResponse,
|
AddPetResponse,
|
||||||
@ -151,6 +152,12 @@ fn main() {
|
|||||||
println!("{:?} (X-Span-ID: {:?})", result, client.context().x_span_id.clone().unwrap_or(String::from("<none>")));
|
println!("{:?} (X-Span-ID: {:?})", result, client.context().x_span_id.clone().unwrap_or(String::from("<none>")));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Disabled because there's no example.
|
||||||
|
// Some("TestInlineAdditionalProperties") => {
|
||||||
|
// let result = client.test_inline_additional_properties(???).wait();
|
||||||
|
// println!("{:?} (X-Span-ID: {:?})", result, client.context().x_span_id.clone().unwrap_or(String::from("<none>")));
|
||||||
|
// },
|
||||||
|
|
||||||
Some("TestJsonFormData") => {
|
Some("TestJsonFormData") => {
|
||||||
let result = client.test_json_form_data("param_example".to_string(), "param2_example".to_string()).wait();
|
let result = client.test_json_form_data("param_example".to_string(), "param2_example".to_string()).wait();
|
||||||
println!("{:?} (X-Span-ID: {:?})", result, client.context().x_span_id.clone().unwrap_or(String::from("<none>")));
|
println!("{:?} (X-Span-ID: {:?})", result, client.context().x_span_id.clone().unwrap_or(String::from("<none>")));
|
@ -20,6 +20,7 @@ use petstore_api::{Api, ApiError, Context,
|
|||||||
TestClientModelResponse,
|
TestClientModelResponse,
|
||||||
TestEndpointParametersResponse,
|
TestEndpointParametersResponse,
|
||||||
TestEnumParametersResponse,
|
TestEnumParametersResponse,
|
||||||
|
TestInlineAdditionalPropertiesResponse,
|
||||||
TestJsonFormDataResponse,
|
TestJsonFormDataResponse,
|
||||||
TestClassnameResponse,
|
TestClassnameResponse,
|
||||||
AddPetResponse,
|
AddPetResponse,
|
||||||
@ -121,6 +122,13 @@ impl Api for Server {
|
|||||||
Box::new(futures::failed("Generic failure".into()))
|
Box::new(futures::failed("Generic failure".into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// test inline additionalProperties
|
||||||
|
fn test_inline_additional_properties(&self, param: object, context: &Context) -> Box<Future<Item=TestInlineAdditionalPropertiesResponse, Error=ApiError> + Send> {
|
||||||
|
let context = context.clone();
|
||||||
|
println!("test_inline_additional_properties({:?}) - X-Span-ID: {:?}", param, context.x_span_id.unwrap_or(String::from("<none>")).clone());
|
||||||
|
Box::new(futures::failed("Generic failure".into()))
|
||||||
|
}
|
||||||
|
|
||||||
/// test json serialization of form data
|
/// test json serialization of form data
|
||||||
fn test_json_form_data(&self, param: String, param2: String, context: &Context) -> Box<Future<Item=TestJsonFormDataResponse, Error=ApiError> + Send> {
|
fn test_json_form_data(&self, param: String, param2: String, context: &Context) -> Box<Future<Item=TestJsonFormDataResponse, Error=ApiError> + Send> {
|
||||||
let context = context.clone();
|
let context = context.clone();
|
@ -45,6 +45,7 @@ use {Api,
|
|||||||
TestClientModelResponse,
|
TestClientModelResponse,
|
||||||
TestEndpointParametersResponse,
|
TestEndpointParametersResponse,
|
||||||
TestEnumParametersResponse,
|
TestEnumParametersResponse,
|
||||||
|
TestInlineAdditionalPropertiesResponse,
|
||||||
TestJsonFormDataResponse,
|
TestJsonFormDataResponse,
|
||||||
TestClassnameResponse,
|
TestClassnameResponse,
|
||||||
AddPetResponse,
|
AddPetResponse,
|
||||||
@ -307,11 +308,7 @@ impl Api for Client {
|
|||||||
let url = format!("{}/v2/fake/xmlFeatures?", self.base_path);
|
let url = format!("{}/v2/fake/xmlFeatures?", self.base_path);
|
||||||
|
|
||||||
|
|
||||||
|
let body = serde_xml_rs::to_string(¶m_xml_object).expect("impossible to fail to serialize");
|
||||||
let mut namespaces = BTreeMap::new();
|
|
||||||
// An empty string is used to indicate a global namespace in xmltree.
|
|
||||||
namespaces.insert("".to_string(), models::namespaces::XMLOBJECT.clone());
|
|
||||||
let body = serde_xml_rs::to_string_with_namespaces(¶m_xml_object, namespaces).expect("impossible to fail to serialize");
|
|
||||||
|
|
||||||
let hyper_client = (self.hyper_client)();
|
let hyper_client = (self.hyper_client)();
|
||||||
let request = hyper_client.request(hyper::method::Method::Post, &url);
|
let request = hyper_client.request(hyper::method::Method::Post, &url);
|
||||||
@ -744,6 +741,55 @@ impl Api for Client {
|
|||||||
Box::new(futures::done(result))
|
Box::new(futures::done(result))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_inline_additional_properties(&self, param_param: object, context: &Context) -> Box<Future<Item=TestInlineAdditionalPropertiesResponse, Error=ApiError> + Send> {
|
||||||
|
|
||||||
|
|
||||||
|
let url = format!("{}/v2/fake/inline-additionalProperties?", self.base_path);
|
||||||
|
|
||||||
|
|
||||||
|
let body = serde_json::to_string(¶m_param).expect("impossible to fail to serialize");
|
||||||
|
|
||||||
|
let hyper_client = (self.hyper_client)();
|
||||||
|
let request = hyper_client.request(hyper::method::Method::Post, &url);
|
||||||
|
let mut custom_headers = hyper::header::Headers::new();
|
||||||
|
|
||||||
|
let request = request.body(&body);
|
||||||
|
|
||||||
|
custom_headers.set(ContentType(mimetypes::requests::TEST_INLINE_ADDITIONAL_PROPERTIES.clone()));
|
||||||
|
context.x_span_id.as_ref().map(|header| custom_headers.set(XSpanId(header.clone())));
|
||||||
|
|
||||||
|
|
||||||
|
let request = request.headers(custom_headers);
|
||||||
|
|
||||||
|
// Helper function to provide a code block to use `?` in (to be replaced by the `catch` block when it exists).
|
||||||
|
fn parse_response(mut response: hyper::client::response::Response) -> Result<TestInlineAdditionalPropertiesResponse, ApiError> {
|
||||||
|
match response.status.to_u16() {
|
||||||
|
200 => {
|
||||||
|
|
||||||
|
|
||||||
|
Ok(TestInlineAdditionalPropertiesResponse::SuccessfulOperation)
|
||||||
|
},
|
||||||
|
code => {
|
||||||
|
let mut buf = [0; 100];
|
||||||
|
let debug_body = match response.read(&mut buf) {
|
||||||
|
Ok(len) => match str::from_utf8(&buf[..len]) {
|
||||||
|
Ok(body) => Cow::from(body),
|
||||||
|
Err(_) => Cow::from(format!("<Body was not UTF8: {:?}>", &buf[..len].to_vec())),
|
||||||
|
},
|
||||||
|
Err(e) => Cow::from(format!("<Failed to read body: {}>", e)),
|
||||||
|
};
|
||||||
|
Err(ApiError(format!("Unexpected response code {}:\n{:?}\n\n{}",
|
||||||
|
code,
|
||||||
|
response.headers,
|
||||||
|
debug_body)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let result = request.send().map_err(|e| ApiError(format!("No response received: {}", e))).and_then(parse_response);
|
||||||
|
Box::new(futures::done(result))
|
||||||
|
}
|
||||||
|
|
||||||
fn test_json_form_data(&self, param_param: String, param_param2: String, context: &Context) -> Box<Future<Item=TestJsonFormDataResponse, Error=ApiError> + Send> {
|
fn test_json_form_data(&self, param_param: String, param_param2: String, context: &Context) -> Box<Future<Item=TestJsonFormDataResponse, Error=ApiError> + Send> {
|
||||||
|
|
||||||
|
|
@ -85,6 +85,11 @@ pub enum TestEnumParametersResponse {
|
|||||||
NotFound ,
|
NotFound ,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq)]
|
||||||
|
pub enum TestInlineAdditionalPropertiesResponse {
|
||||||
|
SuccessfulOperation ,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
pub enum TestJsonFormDataResponse {
|
pub enum TestJsonFormDataResponse {
|
||||||
SuccessfulOperation ,
|
SuccessfulOperation ,
|
||||||
@ -244,6 +249,9 @@ pub trait Api {
|
|||||||
/// To test enum parameters
|
/// To test enum parameters
|
||||||
fn test_enum_parameters(&self, enum_form_string_array: Option<&Vec<String>>, enum_form_string: Option<String>, enum_header_string_array: Option<&Vec<String>>, enum_header_string: Option<String>, enum_query_string_array: Option<&Vec<String>>, enum_query_string: Option<String>, enum_query_integer: Option<i32>, enum_query_double: Option<f64>, context: &Context) -> Box<Future<Item=TestEnumParametersResponse, Error=ApiError> + Send>;
|
fn test_enum_parameters(&self, enum_form_string_array: Option<&Vec<String>>, enum_form_string: Option<String>, enum_header_string_array: Option<&Vec<String>>, enum_header_string: Option<String>, enum_query_string_array: Option<&Vec<String>>, enum_query_string: Option<String>, enum_query_integer: Option<i32>, enum_query_double: Option<f64>, context: &Context) -> Box<Future<Item=TestEnumParametersResponse, Error=ApiError> + Send>;
|
||||||
|
|
||||||
|
/// test inline additionalProperties
|
||||||
|
fn test_inline_additional_properties(&self, param: object, context: &Context) -> Box<Future<Item=TestInlineAdditionalPropertiesResponse, Error=ApiError> + Send>;
|
||||||
|
|
||||||
/// test json serialization of form data
|
/// test json serialization of form data
|
||||||
fn test_json_form_data(&self, param: String, param2: String, context: &Context) -> Box<Future<Item=TestJsonFormDataResponse, Error=ApiError> + Send>;
|
fn test_json_form_data(&self, param: String, param2: String, context: &Context) -> Box<Future<Item=TestJsonFormDataResponse, Error=ApiError> + Send>;
|
||||||
|
|
||||||
@ -345,6 +353,9 @@ pub trait ApiNoContext {
|
|||||||
/// To test enum parameters
|
/// To test enum parameters
|
||||||
fn test_enum_parameters(&self, enum_form_string_array: Option<&Vec<String>>, enum_form_string: Option<String>, enum_header_string_array: Option<&Vec<String>>, enum_header_string: Option<String>, enum_query_string_array: Option<&Vec<String>>, enum_query_string: Option<String>, enum_query_integer: Option<i32>, enum_query_double: Option<f64>) -> Box<Future<Item=TestEnumParametersResponse, Error=ApiError> + Send>;
|
fn test_enum_parameters(&self, enum_form_string_array: Option<&Vec<String>>, enum_form_string: Option<String>, enum_header_string_array: Option<&Vec<String>>, enum_header_string: Option<String>, enum_query_string_array: Option<&Vec<String>>, enum_query_string: Option<String>, enum_query_integer: Option<i32>, enum_query_double: Option<f64>) -> Box<Future<Item=TestEnumParametersResponse, Error=ApiError> + Send>;
|
||||||
|
|
||||||
|
/// test inline additionalProperties
|
||||||
|
fn test_inline_additional_properties(&self, param: object) -> Box<Future<Item=TestInlineAdditionalPropertiesResponse, Error=ApiError> + Send>;
|
||||||
|
|
||||||
/// test json serialization of form data
|
/// test json serialization of form data
|
||||||
fn test_json_form_data(&self, param: String, param2: String) -> Box<Future<Item=TestJsonFormDataResponse, Error=ApiError> + Send>;
|
fn test_json_form_data(&self, param: String, param2: String) -> Box<Future<Item=TestJsonFormDataResponse, Error=ApiError> + Send>;
|
||||||
|
|
||||||
@ -477,6 +488,11 @@ impl<'a, T: Api> ApiNoContext for ContextWrapper<'a, T> {
|
|||||||
self.api().test_enum_parameters(enum_form_string_array, enum_form_string, enum_header_string_array, enum_header_string, enum_query_string_array, enum_query_string, enum_query_integer, enum_query_double, &self.context())
|
self.api().test_enum_parameters(enum_form_string_array, enum_form_string, enum_header_string_array, enum_header_string, enum_query_string_array, enum_query_string, enum_query_integer, enum_query_double, &self.context())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// test inline additionalProperties
|
||||||
|
fn test_inline_additional_properties(&self, param: object) -> Box<Future<Item=TestInlineAdditionalPropertiesResponse, Error=ApiError> + Send> {
|
||||||
|
self.api().test_inline_additional_properties(param, &self.context())
|
||||||
|
}
|
||||||
|
|
||||||
/// test json serialization of form data
|
/// test json serialization of form data
|
||||||
fn test_json_form_data(&self, param: String, param2: String) -> Box<Future<Item=TestJsonFormDataResponse, Error=ApiError> + Send> {
|
fn test_json_form_data(&self, param: String, param2: String) -> Box<Future<Item=TestJsonFormDataResponse, Error=ApiError> + Send> {
|
||||||
self.api().test_json_form_data(param, param2, &self.context())
|
self.api().test_json_form_data(param, param2, &self.context())
|
@ -89,6 +89,10 @@ pub mod requests {
|
|||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref TEST_CLIENT_MODEL: Mime = mime!(Application/Json);
|
pub static ref TEST_CLIENT_MODEL: Mime = mime!(Application/Json);
|
||||||
}
|
}
|
||||||
|
/// Create Mime objects for the request content types for TestInlineAdditionalProperties
|
||||||
|
lazy_static! {
|
||||||
|
pub static ref TEST_INLINE_ADDITIONAL_PROPERTIES: Mime = mime!(Application/Json);
|
||||||
|
}
|
||||||
/// Create Mime objects for the request content types for TestClassname
|
/// Create Mime objects for the request content types for TestClassname
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref TEST_CLASSNAME: Mime = mime!(Application/Json);
|
pub static ref TEST_CLASSNAME: Mime = mime!(Application/Json);
|
@ -481,76 +481,6 @@ impl HasOnlyReadOnly {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Utility function for wrapping list elements when serializing xml
|
|
||||||
fn wrap_in_item<S>(item: &Vec<String>, serializer: S) -> Result<S::Ok, S::Error>
|
|
||||||
where
|
|
||||||
S: Serializer,
|
|
||||||
{
|
|
||||||
serde_xml_rs::wrap_primitives(item, serializer, "item")
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
||||||
pub struct ItemList(Vec<String>);
|
|
||||||
|
|
||||||
impl ::std::convert::From<Vec<String>> for ItemList {
|
|
||||||
fn from(x: Vec<String>) -> Self {
|
|
||||||
ItemList(x)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::convert::From<ItemList> for Vec<String> {
|
|
||||||
fn from(x: ItemList) -> Self {
|
|
||||||
x.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::iter::FromIterator<String> for ItemList {
|
|
||||||
fn from_iter<U: IntoIterator<Item=String>>(u: U) -> Self {
|
|
||||||
ItemList(Vec::<String>::from_iter(u))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::iter::IntoIterator for ItemList {
|
|
||||||
type Item = String;
|
|
||||||
type IntoIter = ::std::vec::IntoIter<String>;
|
|
||||||
|
|
||||||
fn into_iter(self) -> Self::IntoIter {
|
|
||||||
self.0.into_iter()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> ::std::iter::IntoIterator for &'a ItemList {
|
|
||||||
type Item = &'a String;
|
|
||||||
type IntoIter = ::std::slice::Iter<'a, String>;
|
|
||||||
|
|
||||||
fn into_iter(self) -> Self::IntoIter {
|
|
||||||
(&self.0).into_iter()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> ::std::iter::IntoIterator for &'a mut ItemList {
|
|
||||||
type Item = &'a mut String;
|
|
||||||
type IntoIter = ::std::slice::IterMut<'a, String>;
|
|
||||||
|
|
||||||
fn into_iter(self) -> Self::IntoIter {
|
|
||||||
(&mut self.0).into_iter()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::ops::Deref for ItemList {
|
|
||||||
type Target = Vec<String>;
|
|
||||||
fn deref(&self) -> &Self::Target {
|
|
||||||
&self.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ::std::ops::DerefMut for ItemList {
|
|
||||||
fn deref_mut(&mut self) -> &mut Self::Target {
|
|
||||||
&mut self.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct List {
|
pub struct List {
|
||||||
#[serde(rename = "123-list")]
|
#[serde(rename = "123-list")]
|
||||||
@ -1056,27 +986,6 @@ impl User {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
||||||
#[serde(rename = "group")]
|
|
||||||
pub struct XmlObject {
|
|
||||||
#[serde(rename = "name")]
|
|
||||||
pub name: String,
|
|
||||||
|
|
||||||
#[serde(rename = "itemList")]
|
|
||||||
#[serde(serialize_with = "wrap_in_item")]
|
|
||||||
pub item_list: models::ItemList,
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
impl XmlObject {
|
|
||||||
pub fn new(name: String, item_list: models::ItemList, ) -> XmlObject {
|
|
||||||
XmlObject {
|
|
||||||
name: name,
|
|
||||||
item_list: item_list,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct Cat {
|
pub struct Cat {
|
||||||
#[serde(rename = "className")]
|
#[serde(rename = "className")]
|
||||||
@ -1126,11 +1035,3 @@ impl Dog {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//XML namespaces
|
|
||||||
pub mod namespaces {
|
|
||||||
lazy_static!{
|
|
||||||
pub static ref XMLOBJECT: String = "http://example.com/schema.xsd".to_string();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@ -47,6 +47,7 @@ use {Api,
|
|||||||
TestClientModelResponse,
|
TestClientModelResponse,
|
||||||
TestEndpointParametersResponse,
|
TestEndpointParametersResponse,
|
||||||
TestEnumParametersResponse,
|
TestEnumParametersResponse,
|
||||||
|
TestInlineAdditionalPropertiesResponse,
|
||||||
TestJsonFormDataResponse,
|
TestJsonFormDataResponse,
|
||||||
TestClassnameResponse,
|
TestClassnameResponse,
|
||||||
AddPetResponse,
|
AddPetResponse,
|
||||||
@ -200,11 +201,7 @@ fn add_routes<T>(router: &mut Router, api: T) where T: Api + Send + Sync + Clone
|
|||||||
Ok(rsp) => match rsp {
|
Ok(rsp) => match rsp {
|
||||||
GetXmlFeaturesResponse::Success(body) => {
|
GetXmlFeaturesResponse::Success(body) => {
|
||||||
|
|
||||||
|
let body_string = serde_xml_rs::to_string(&body).expect("impossible to fail to serialize");
|
||||||
let mut namespaces = BTreeMap::new();
|
|
||||||
// An empty string is used to indicate a global namespace in xmltree.
|
|
||||||
namespaces.insert("".to_string(), models::namespaces::XMLOBJECT.clone());
|
|
||||||
let body_string = serde_xml_rs::to_string_with_namespaces(&body, namespaces).expect("impossible to fail to serialize");
|
|
||||||
|
|
||||||
let mut response = Response::with((status::Status::from_u16(200), body_string));
|
let mut response = Response::with((status::Status::from_u16(200), body_string));
|
||||||
response.headers.set(ContentType(mimetypes::responses::GET_XML_FEATURES_SUCCESS.clone()));
|
response.headers.set(ContentType(mimetypes::responses::GET_XML_FEATURES_SUCCESS.clone()));
|
||||||
@ -781,6 +778,72 @@ fn add_routes<T>(router: &mut Router, api: T) where T: Api + Send + Sync + Clone
|
|||||||
},
|
},
|
||||||
"TestEnumParameters");
|
"TestEnumParameters");
|
||||||
|
|
||||||
|
let api_clone = api.clone();
|
||||||
|
router.post(
|
||||||
|
"/v2/fake/inline-additionalProperties",
|
||||||
|
move |req: &mut Request| {
|
||||||
|
let mut context = Context::default();
|
||||||
|
|
||||||
|
// Helper function to provide a code block to use `?` in (to be replaced by the `catch` block when it exists).
|
||||||
|
fn handle_request<T>(req: &mut Request, api: &T, context: &mut Context) -> Result<Response, Response> where T: Api {
|
||||||
|
|
||||||
|
context.x_span_id = Some(req.headers.get::<XSpanId>().map(XSpanId::to_string).unwrap_or_else(|| self::uuid::Uuid::new_v4().to_string()));
|
||||||
|
context.auth_data = req.extensions.remove::<AuthData>();
|
||||||
|
context.authorization = req.extensions.remove::<Authorization>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Body parameters (note that non-required body parameters will ignore garbage
|
||||||
|
// values, rather than causing a 400 response). Produce warning header and logs for
|
||||||
|
// any unused fields.
|
||||||
|
|
||||||
|
let param_param_raw = req.get::<bodyparser::Raw>().map_err(|e| Response::with((status::BadRequest, format!("Couldn't parse body parameter param - not valid UTF-8: {}", e))))?;
|
||||||
|
let mut unused_elements = Vec::new();
|
||||||
|
|
||||||
|
let param_param = if let Some(param_param_raw) = param_param_raw {
|
||||||
|
let deserializer = &mut serde_json::Deserializer::from_str(¶m_param_raw);
|
||||||
|
|
||||||
|
let param_param: Option<object> = serde_ignored::deserialize(deserializer, |path| {
|
||||||
|
warn!("Ignoring unknown field in body: {}", path);
|
||||||
|
unused_elements.push(path.to_string());
|
||||||
|
}).map_err(|e| Response::with((status::BadRequest, format!("Couldn't parse body parameter param - doesn't match schema: {}", e))))?;
|
||||||
|
|
||||||
|
param_param
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
|
let param_param = param_param.ok_or_else(|| Response::with((status::BadRequest, "Missing required body parameter param".to_string())))?;
|
||||||
|
|
||||||
|
|
||||||
|
match api.test_inline_additional_properties(param_param, context).wait() {
|
||||||
|
Ok(rsp) => match rsp {
|
||||||
|
TestInlineAdditionalPropertiesResponse::SuccessfulOperation => {
|
||||||
|
|
||||||
|
|
||||||
|
let mut response = Response::with((status::Status::from_u16(200)));
|
||||||
|
context.x_span_id.as_ref().map(|header| response.headers.set(XSpanId(header.clone())));
|
||||||
|
if !unused_elements.is_empty() {
|
||||||
|
response.headers.set(Warning(format!("Ignoring unknown fields in body: {:?}", unused_elements)));
|
||||||
|
}
|
||||||
|
Ok(response)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Err(_) => {
|
||||||
|
// Application code returned an error. This should not happen, as the implementation should
|
||||||
|
// return a valid response.
|
||||||
|
Err(Response::with((status::InternalServerError, "An internal error occurred".to_string())))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handle_request(req, &api_clone, &mut context).or_else(|mut response| {
|
||||||
|
context.x_span_id.as_ref().map(|header| response.headers.set(XSpanId(header.clone())));
|
||||||
|
Ok(response)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
"TestInlineAdditionalProperties");
|
||||||
|
|
||||||
let api_clone = api.clone();
|
let api_clone = api.clone();
|
||||||
router.get(
|
router.get(
|
||||||
"/v2/fake/jsonFormData",
|
"/v2/fake/jsonFormData",
|
Loading…
x
Reference in New Issue
Block a user