diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RustClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RustClientCodegen.java index cb8b84e993b..9b9ae585b30 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RustClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/RustClientCodegen.java @@ -93,7 +93,7 @@ public RustClientCodegen() { typeMapping.put("date", "string"); typeMapping.put("DateTime", "String"); typeMapping.put("password", "String"); - // TODO what should 'file' mapped to + // TODO(farcaller): map file typeMapping.put("file", "File"); typeMapping.put("binary", "Vec"); typeMapping.put("ByteArray", "String"); @@ -300,7 +300,7 @@ else if (p instanceof MapProperty) { // return fully-qualified model name // ::models::{{classnameFile}}::{{classname}} - return "::models::" + toModelFilename(swaggerType) + "::" + toModelName(swaggerType); + return "::models::" + toModelName(swaggerType); } @Override diff --git a/modules/swagger-codegen/src/main/resources/rust/api.mustache b/modules/swagger-codegen/src/main/resources/rust/api.mustache index 9aa5e11df09..9941dc92277 100644 --- a/modules/swagger-codegen/src/main/resources/rust/api.mustache +++ b/modules/swagger-codegen/src/main/resources/rust/api.mustache @@ -24,7 +24,7 @@ impl {{{classname}}}Impl { pub trait {{classname}} { {{#operations}} {{#operation}} - fn {{{operationId}}}(&self, {{#allParams}}{{paramName}}: {{#isString}}&str{{/isString}}{{^isString}}{{{dataType}}}{{/isString}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Box>; + fn {{{operationId}}}(&self, {{#allParams}}{{paramName}}: {{#isString}}&str{{/isString}}{{^isString}}{{^isPrimitiveType}}{{^isContainer}}::models::{{/isContainer}}{{/isPrimitiveType}}{{{dataType}}}{{/isString}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Box>; {{/operation}} {{/operations}} } @@ -33,35 +33,42 @@ pub trait {{classname}} { impl{{classname}} for {{classname}}Impl { {{#operations}} {{#operation}} - fn {{{operationId}}}(&self, {{#allParams}}{{paramName}}: {{#isString}}&str{{/isString}}{{^isString}}{{{dataType}}}{{/isString}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Box> { + fn {{{operationId}}}(&self, {{#allParams}}{{paramName}}: {{#isString}}&str{{/isString}}{{^isString}}{{^isPrimitiveType}}{{^isContainer}}::models::{{/isContainer}}{{/isPrimitiveType}}{{{dataType}}}{{/isString}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Box> { let configuration: &configuration::Configuration = self.configuration.borrow(); let method = hyper::Method::{{httpMethod}}; {{^hasQueryParams}} - let uri = format!("{}{{{path}}}", configuration.base_path{{#pathParams}}, {{baseName}}={{paramName}}{{/pathParams}}); + let uri_str = format!("{}{{{path}}}", configuration.base_path{{#pathParams}}, {{baseName}}={{paramName}}{{#isListContainer}}.join(",").as_ref(){{/isListContainer}}{{/pathParams}}); {{/hasQueryParams}} {{#hasQueryParams}} - let query = url::form_urlencoded::Serializer::new(String::new()) + let query = ::url::form_urlencoded::Serializer::new(String::new()) {{#queryParams}} - .append_pair("{{baseName}}", {{paramName}}) + .append_pair("{{baseName}}", &{{paramName}}{{#isListContainer}}.join(","){{/isListContainer}}.to_string()) {{/queryParams}} .finish(); - let uri = format!("{}{{{path}}}{}", configuration.base_path, query{{#pathParams}}, {{baseName}}={{paramName}}{{/pathParams}}); + let uri_str = format!("{}{{{path}}}{}", configuration.base_path, query{{#pathParams}}, {{baseName}}={{paramName}}{{#isListContainer}}.join(",").as_ref(){{/isListContainer}}{{/pathParams}}); {{/hasQueryParams}} - let mut req = hyper::Request::new(method, uri); + let uri = uri_str.parse(); + // TODO(farcaller): handle error + // if let Err(e) = uri { + // return Box::new(futures::future::err(e)); + // } + let mut req = hyper::Request::new(method, uri.unwrap()); {{#hasHeaderParams}} - let mut headers = req.headers_mut(); - {{#headerParams}} - headers.set_raw("{{baseName}}", {{paramName}}); - {{/headerParams}} + { + let mut headers = req.headers_mut(); + {{#headerParams}} + headers.set_raw("{{baseName}}", {{paramName}}{{#isListContainer}}.join(",").as_ref(){{/isListContainer}}); + {{/headerParams}} + } {{/hasHeaderParams}} {{#hasBodyParam}} {{#bodyParams}} - let serialized = serde_json::to_string(body).unwrap(); + let serialized = serde_json::to_string(&body).unwrap(); req.headers_mut().set(hyper::header::ContentType::json()); req.headers_mut().set(hyper::header::ContentLength(serialized.len() as u64)); req.set_body(serialized); diff --git a/modules/swagger-codegen/src/main/resources/rust/api_mod.mustache b/modules/swagger-codegen/src/main/resources/rust/api_mod.mustache index 67ebae27b6d..e9f0ac2ce01 100644 --- a/modules/swagger-codegen/src/main/resources/rust/api_mod.mustache +++ b/modules/swagger-codegen/src/main/resources/rust/api_mod.mustache @@ -27,9 +27,8 @@ mod {{classFilename}}; {{#operations}} {{#operation}} {{#-last}} - pub use self::{{classFilename}}::{{classname}}; - +pub use self::{{classFilename}}::{{classname}}Impl; {{/-last}} {{/operation}} {{/operations}} diff --git a/modules/swagger-codegen/src/main/resources/rust/client.mustache b/modules/swagger-codegen/src/main/resources/rust/client.mustache index d840b8a1684..82294ec771a 100644 --- a/modules/swagger-codegen/src/main/resources/rust/client.mustache +++ b/modules/swagger-codegen/src/main/resources/rust/client.mustache @@ -2,7 +2,6 @@ use std::rc::Rc; use hyper; use super::configuration::Configuration; -use super::pet_api; pub struct APIClient { configuration: Rc>, @@ -11,7 +10,7 @@ pub struct APIClient { {{#operations}} {{#operation}} {{#-last}} - {{classFilename}}: Box<{{classFilename}}::{{classname}}>, + {{classFilename}}: Box<::apis::{{classname}}>, {{/-last}} {{/operation}} {{/operations}} @@ -30,7 +29,7 @@ impl APIClient { {{#operations}} {{#operation}} {{#-last}} - {{classFilename}}: Box::new({{classFilename}}::{{classname}}Impl::new(rc.clone())), + {{classFilename}}: Box::new(::apis::{{classname}}Impl::new(rc.clone())), {{/-last}} {{/operation}} {{/operations}} @@ -44,7 +43,7 @@ impl APIClient { {{#operations}} {{#operation}} {{#-last}} - pub fn {{classFilename}}(&self) -> &{{classFilename}}::{{classname}}{ + pub fn {{classFilename}}(&self) -> &::apis::{{classname}}{ self.{{classFilename}}.as_ref() } diff --git a/modules/swagger-codegen/src/main/resources/rust/model.mustache b/modules/swagger-codegen/src/main/resources/rust/model.mustache index 3fe6089cd63..f893e744239 100644 --- a/modules/swagger-codegen/src/main/resources/rust/model.mustache +++ b/modules/swagger-codegen/src/main/resources/rust/model.mustache @@ -11,7 +11,7 @@ pub struct {{classname}} { {{#description}} /// {{{description}}} {{/description}} - #[serde(rename = "{{baseName}}")] {{name}}: {{^required}}Option<{{/required}}{{^isPrimitiveType}}{{^isContainer}}super::{{/isContainer}}{{/isPrimitiveType}}{{{datatype}}}{{^required}}>{{/required}}{{#hasMore}},{{/hasMore}} + #[serde(rename = "{{baseName}}")] {{name}}: {{^required}}Option<{{/required}}{{{datatype}}}{{^required}}>{{/required}}{{#hasMore}},{{/hasMore}} {{/vars}} } @@ -22,7 +22,7 @@ impl {{classname}} { pub fn new({{#requiredVars}}{{name}}: {{{datatype}}}{{^-last}}, {{/-last}}{{/requiredVars}}) -> {{classname}} { {{classname}} { {{#vars}} - {{name}}: {{#required}}{{name}}{{/required}}{{^required}}{{#isListContainer}}None{{/isListContainer}}{{#isMapContainer}}HashMap::new(){{/isMapContainer}}{{^isContainer}}None{{/isContainer}}{{/required}}{{#hasMore}},{{/hasMore}} + {{name}}: {{#required}}{{name}}{{/required}}{{^required}}{{#isListContainer}}None{{/isListContainer}}{{#isMapContainer}}None{{/isMapContainer}}{{^isContainer}}None{{/isContainer}}{{/required}}{{#hasMore}},{{/hasMore}} {{/vars}} } } diff --git a/modules/swagger-codegen/src/main/resources/rust/model_mod.mustache b/modules/swagger-codegen/src/main/resources/rust/model_mod.mustache index daddc889b81..d2b7578f324 100644 --- a/modules/swagger-codegen/src/main/resources/rust/model_mod.mustache +++ b/modules/swagger-codegen/src/main/resources/rust/model_mod.mustache @@ -4,3 +4,6 @@ mod {{{classFilename}}}; pub use self::{{{classFilename}}}::{{{classname}}}; {{/model}} {{/models}} + +// TODO(farcaller): sort out files +pub struct File;