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:
|
||||
|
||||
- **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**
|
||||
- **Configuration files**: [**Apache2**](https://httpd.apache.org/)
|
||||
- **Others**: **JMeter**
|
||||
|
@ -26,6 +26,6 @@ fi
|
||||
|
||||
# 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"
|
||||
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
|
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 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>();
|
||||
|
||||
protected String apiVersion = "1.0.0";
|
||||
protected int serverPort = 8080;
|
||||
protected String projectName = "swagger-server";
|
||||
protected String apiPath = "rust2";
|
||||
protected String apiPath = "rust-server";
|
||||
protected String packageName;
|
||||
protected String packageVersion;
|
||||
protected String externCrateName;
|
||||
|
||||
public Rust2Codegen() {
|
||||
public RustServerCodegen() {
|
||||
super();
|
||||
|
||||
// set the output folder here
|
||||
outputFolder = "generated-code/rust2";
|
||||
outputFolder = "generated-code/rust-server";
|
||||
|
||||
/*
|
||||
* 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
|
||||
* 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
|
||||
@ -232,7 +232,7 @@ public class Rust2Codegen extends DefaultCodegen implements CodegenConfig {
|
||||
*/
|
||||
@Override
|
||||
public String getName() {
|
||||
return "rust2";
|
||||
return "rust-server";
|
||||
}
|
||||
|
||||
/**
|
||||
@ -243,7 +243,7 @@ public class Rust2Codegen extends DefaultCodegen implements CodegenConfig {
|
||||
*/
|
||||
@Override
|
||||
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
|
@ -55,8 +55,8 @@ io.swagger.codegen.languages.RClientCodegen
|
||||
io.swagger.codegen.languages.Rails5ServerCodegen
|
||||
io.swagger.codegen.languages.RestbedCodegen
|
||||
io.swagger.codegen.languages.RubyClientCodegen
|
||||
io.swagger.codegen.languages.Rust2Codegen
|
||||
io.swagger.codegen.languages.RustClientCodegen
|
||||
io.swagger.codegen.languages.RustServerCodegen
|
||||
io.swagger.codegen.languages.ScalaClientCodegen
|
||||
io.swagger.codegen.languages.ScalatraServerCodegen
|
||||
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)
|
||||
|
||||
- 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
|
||||
|
||||
@ -50,6 +50,7 @@ cargo run --example client FakeOuterStringSerialize
|
||||
cargo run --example client TestClientModel
|
||||
cargo run --example client TestEndpointParameters
|
||||
cargo run --example client TestEnumParameters
|
||||
cargo run --example client TestInlineAdditionalProperties
|
||||
cargo run --example client TestJsonFormData
|
||||
cargo run --example client TestClassname
|
||||
cargo run --example client AddPet
|
@ -10,7 +10,7 @@ info:
|
||||
contact:
|
||||
email: "apiteam@swagger.io"
|
||||
license:
|
||||
name: "Apache 2.0"
|
||||
name: "Apache-2.0"
|
||||
url: "http://www.apache.org/licenses/LICENSE-2.0.html"
|
||||
host: "petstore.swagger.io:80"
|
||||
basePath: "/v2"
|
||||
@ -54,7 +54,7 @@ paths:
|
||||
refName: "Pet"
|
||||
formatString: "{:?}"
|
||||
example: "???"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "ADD_PET"
|
||||
consumesXml: true
|
||||
responses:
|
||||
@ -95,7 +95,7 @@ paths:
|
||||
refName: "Pet"
|
||||
formatString: "{:?}"
|
||||
example: "???"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "UPDATE_PET"
|
||||
consumesXml: true
|
||||
responses:
|
||||
@ -450,7 +450,7 @@ paths:
|
||||
refName: "Order"
|
||||
formatString: "{:?}"
|
||||
example: "???"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "PLACE_ORDER"
|
||||
responses:
|
||||
200:
|
||||
@ -568,7 +568,7 @@ paths:
|
||||
refName: "User"
|
||||
formatString: "{:?}"
|
||||
example: "???"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "CREATE_USER"
|
||||
responses:
|
||||
default:
|
||||
@ -602,7 +602,7 @@ paths:
|
||||
$ref: "#/definitions/User"
|
||||
formatString: "{:?}"
|
||||
example: "&Vec::new()"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "CREATE_USERS_WITH_ARRAY_INPUT"
|
||||
responses:
|
||||
default:
|
||||
@ -635,7 +635,7 @@ paths:
|
||||
$ref: "#/definitions/User"
|
||||
formatString: "{:?}"
|
||||
example: "&Vec::new()"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "CREATE_USERS_WITH_LIST_INPUT"
|
||||
responses:
|
||||
default:
|
||||
@ -787,7 +787,7 @@ paths:
|
||||
refName: "User"
|
||||
formatString: "{:?}"
|
||||
example: "???"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "UPDATE_USER"
|
||||
responses:
|
||||
400:
|
||||
@ -856,7 +856,7 @@ paths:
|
||||
refName: "Client"
|
||||
formatString: "{:?}"
|
||||
example: "???"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "TEST_CLASSNAME"
|
||||
responses:
|
||||
200:
|
||||
@ -1169,7 +1169,7 @@ paths:
|
||||
refName: "Client"
|
||||
formatString: "{:?}"
|
||||
example: "???"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "TEST_CLIENT_MODEL"
|
||||
responses:
|
||||
200:
|
||||
@ -1202,7 +1202,7 @@ paths:
|
||||
refName: "OuterNumber"
|
||||
formatString: "{:?}"
|
||||
example: "None"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "FAKE_OUTER_NUMBER_SERIALIZE"
|
||||
responses:
|
||||
200:
|
||||
@ -1234,7 +1234,7 @@ paths:
|
||||
refName: "OuterString"
|
||||
formatString: "{:?}"
|
||||
example: "None"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "FAKE_OUTER_STRING_SERIALIZE"
|
||||
responses:
|
||||
200:
|
||||
@ -1266,7 +1266,7 @@ paths:
|
||||
refName: "OuterBoolean"
|
||||
formatString: "{:?}"
|
||||
example: "None"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "FAKE_OUTER_BOOLEAN_SERIALIZE"
|
||||
responses:
|
||||
200:
|
||||
@ -1298,7 +1298,7 @@ paths:
|
||||
refName: "OuterComposite"
|
||||
formatString: "{:?}"
|
||||
example: "None"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "FAKE_OUTER_COMPOSITE_SERIALIZE"
|
||||
responses:
|
||||
200:
|
||||
@ -1365,7 +1365,6 @@ paths:
|
||||
uppercase_message: "SUCCESS"
|
||||
uppercase_data_type: "XMLOBJECT"
|
||||
producesXml: true
|
||||
has_namespace: "true"
|
||||
operation_id: "get_xml_features"
|
||||
uppercase_operation_id: "GET_XML_FEATURES"
|
||||
path: "/fake/xmlFeatures"
|
||||
@ -1388,8 +1387,7 @@ paths:
|
||||
refName: "xmlObject"
|
||||
formatString: "{:?}"
|
||||
example: "???"
|
||||
has_namespace: "true"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "POST_XML_FEATURES"
|
||||
consumesXml: true
|
||||
responses:
|
||||
@ -1403,6 +1401,41 @@ paths:
|
||||
HttpMethod: "Post"
|
||||
httpmethod: "post"
|
||||
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:
|
||||
patch:
|
||||
tags:
|
||||
@ -1425,7 +1458,7 @@ paths:
|
||||
refName: "Client"
|
||||
formatString: "{:?}"
|
||||
example: "???"
|
||||
model_key: "itemList"
|
||||
model_key: "OuterBoolean"
|
||||
uppercase_operation_id: "TEST_SPECIAL_TAGS"
|
||||
responses:
|
||||
200:
|
||||
@ -1968,15 +2001,6 @@ definitions:
|
||||
- "approved"
|
||||
- "delivered"
|
||||
upperCaseName: "OUTERENUM"
|
||||
OuterNumber:
|
||||
type: "number"
|
||||
upperCaseName: "OUTERNUMBER"
|
||||
OuterString:
|
||||
type: "string"
|
||||
upperCaseName: "OUTERSTRING"
|
||||
OuterBoolean:
|
||||
type: "boolean"
|
||||
upperCaseName: "OUTERBOOLEAN"
|
||||
OuterComposite:
|
||||
type: "object"
|
||||
properties:
|
||||
@ -1991,30 +2015,15 @@ definitions:
|
||||
my_number: {}
|
||||
my_boolean: {}
|
||||
upperCaseName: "OUTERCOMPOSITE"
|
||||
xmlObject:
|
||||
required:
|
||||
- "itemList"
|
||||
- "name"
|
||||
properties:
|
||||
name:
|
||||
OuterNumber:
|
||||
type: "number"
|
||||
upperCaseName: "OUTERNUMBER"
|
||||
OuterString:
|
||||
type: "string"
|
||||
example: "myXmlObject"
|
||||
itemList:
|
||||
$ref: "#/definitions/itemList"
|
||||
itemXmlName: "item"
|
||||
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"
|
||||
upperCaseName: "OUTERSTRING"
|
||||
OuterBoolean:
|
||||
type: "boolean"
|
||||
upperCaseName: "OUTERBOOLEAN"
|
||||
externalDocs:
|
||||
description: "Find out more about Swagger"
|
||||
url: "http://swagger.io"
|
@ -24,6 +24,7 @@ use petstore_api::{ApiNoContext, ContextWrapperExt,
|
||||
TestClientModelResponse,
|
||||
TestEndpointParametersResponse,
|
||||
TestEnumParametersResponse,
|
||||
TestInlineAdditionalPropertiesResponse,
|
||||
TestJsonFormDataResponse,
|
||||
TestClassnameResponse,
|
||||
AddPetResponse,
|
||||
@ -151,6 +152,12 @@ fn main() {
|
||||
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") => {
|
||||
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>")));
|
@ -20,6 +20,7 @@ use petstore_api::{Api, ApiError, Context,
|
||||
TestClientModelResponse,
|
||||
TestEndpointParametersResponse,
|
||||
TestEnumParametersResponse,
|
||||
TestInlineAdditionalPropertiesResponse,
|
||||
TestJsonFormDataResponse,
|
||||
TestClassnameResponse,
|
||||
AddPetResponse,
|
||||
@ -121,6 +122,13 @@ impl Api for Server {
|
||||
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
|
||||
fn test_json_form_data(&self, param: String, param2: String, context: &Context) -> Box<Future<Item=TestJsonFormDataResponse, Error=ApiError> + Send> {
|
||||
let context = context.clone();
|
@ -45,6 +45,7 @@ use {Api,
|
||||
TestClientModelResponse,
|
||||
TestEndpointParametersResponse,
|
||||
TestEnumParametersResponse,
|
||||
TestInlineAdditionalPropertiesResponse,
|
||||
TestJsonFormDataResponse,
|
||||
TestClassnameResponse,
|
||||
AddPetResponse,
|
||||
@ -307,11 +308,7 @@ impl Api for Client {
|
||||
let url = format!("{}/v2/fake/xmlFeatures?", self.base_path);
|
||||
|
||||
|
||||
|
||||
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 body = serde_xml_rs::to_string(¶m_xml_object).expect("impossible to fail to serialize");
|
||||
|
||||
let hyper_client = (self.hyper_client)();
|
||||
let request = hyper_client.request(hyper::method::Method::Post, &url);
|
||||
@ -744,6 +741,55 @@ impl Api for Client {
|
||||
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> {
|
||||
|
||||
|
@ -85,6 +85,11 @@ pub enum TestEnumParametersResponse {
|
||||
NotFound ,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
pub enum TestInlineAdditionalPropertiesResponse {
|
||||
SuccessfulOperation ,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
pub enum TestJsonFormDataResponse {
|
||||
SuccessfulOperation ,
|
||||
@ -244,6 +249,9 @@ pub trait Api {
|
||||
/// 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>;
|
||||
|
||||
/// 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
|
||||
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
|
||||
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
|
||||
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())
|
||||
}
|
||||
|
||||
/// 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
|
||||
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())
|
@ -89,6 +89,10 @@ pub mod requests {
|
||||
lazy_static! {
|
||||
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
|
||||
lazy_static! {
|
||||
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)]
|
||||
pub struct 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)]
|
||||
pub struct Cat {
|
||||
#[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,
|
||||
TestEndpointParametersResponse,
|
||||
TestEnumParametersResponse,
|
||||
TestInlineAdditionalPropertiesResponse,
|
||||
TestJsonFormDataResponse,
|
||||
TestClassnameResponse,
|
||||
AddPetResponse,
|
||||
@ -200,11 +201,7 @@ fn add_routes<T>(router: &mut Router, api: T) where T: Api + Send + Sync + Clone
|
||||
Ok(rsp) => match rsp {
|
||||
GetXmlFeaturesResponse::Success(body) => {
|
||||
|
||||
|
||||
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 body_string = serde_xml_rs::to_string(&body).expect("impossible to fail to serialize");
|
||||
|
||||
let mut response = Response::with((status::Status::from_u16(200), body_string));
|
||||
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");
|
||||
|
||||
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();
|
||||
router.get(
|
||||
"/v2/fake/jsonFormData",
|
Loading…
x
Reference in New Issue
Block a user