Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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<u8>");
typeMapping.put("ByteArray", "String");
Expand Down Expand Up @@ -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
Expand Down
31 changes: 19 additions & 12 deletions modules/swagger-codegen/src/main/resources/rust/api.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ impl<C: hyper::client::Connect> {{{classname}}}Impl<C> {
pub trait {{classname}} {
{{#operations}}
{{#operation}}
fn {{{operationId}}}(&self, {{#allParams}}{{paramName}}: {{#isString}}&str{{/isString}}{{^isString}}{{{dataType}}}{{/isString}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Box<Future<Item = {{^returnType}}(){{/returnType}}{{#returnType}}{{{returnType}}}{{/returnType}}, Error = Error>>;
fn {{{operationId}}}(&self, {{#allParams}}{{paramName}}: {{#isString}}&str{{/isString}}{{^isString}}{{^isPrimitiveType}}{{^isContainer}}::models::{{/isContainer}}{{/isPrimitiveType}}{{{dataType}}}{{/isString}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Box<Future<Item = {{^returnType}}(){{/returnType}}{{#returnType}}{{{returnType}}}{{/returnType}}, Error = Error>>;
{{/operation}}
{{/operations}}
}
Expand All @@ -33,35 +33,42 @@ pub trait {{classname}} {
impl<C: hyper::client::Connect>{{classname}} for {{classname}}Impl<C> {
{{#operations}}
{{#operation}}
fn {{{operationId}}}(&self, {{#allParams}}{{paramName}}: {{#isString}}&str{{/isString}}{{^isString}}{{{dataType}}}{{/isString}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Box<Future<Item = {{^returnType}}(){{/returnType}}{{#returnType}}{{{.}}}{{/returnType}}, Error = Error>> {
fn {{{operationId}}}(&self, {{#allParams}}{{paramName}}: {{#isString}}&str{{/isString}}{{^isString}}{{^isPrimitiveType}}{{^isContainer}}::models::{{/isContainer}}{{/isPrimitiveType}}{{{dataType}}}{{/isString}}{{#hasMore}}, {{/hasMore}}{{/allParams}}) -> Box<Future<Item = {{^returnType}}(){{/returnType}}{{#returnType}}{{{.}}}{{/returnType}}, Error = Error>> {
let configuration: &configuration::Configuration<C> = 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,8 @@ mod {{classFilename}};
{{#operations}}
{{#operation}}
{{#-last}}

pub use self::{{classFilename}}::{{classname}};

pub use self::{{classFilename}}::{{classname}}Impl;
{{/-last}}
{{/operation}}
{{/operations}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ use std::rc::Rc;

use hyper;
use super::configuration::Configuration;
use super::pet_api;

pub struct APIClient<C: hyper::client::Connect> {
configuration: Rc<Configuration<C>>,
Expand All @@ -11,7 +10,7 @@ pub struct APIClient<C: hyper::client::Connect> {
{{#operations}}
{{#operation}}
{{#-last}}
{{classFilename}}: Box<{{classFilename}}::{{classname}}>,
{{classFilename}}: Box<::apis::{{classname}}>,
{{/-last}}
{{/operation}}
{{/operations}}
Expand All @@ -30,7 +29,7 @@ impl<C: hyper::client::Connect> APIClient<C> {
{{#operations}}
{{#operation}}
{{#-last}}
{{classFilename}}: Box::new({{classFilename}}::{{classname}}Impl::new(rc.clone())),
{{classFilename}}: Box::new(::apis::{{classname}}Impl::new(rc.clone())),
{{/-last}}
{{/operation}}
{{/operations}}
Expand All @@ -44,7 +43,7 @@ impl<C: hyper::client::Connect> APIClient<C> {
{{#operations}}
{{#operation}}
{{#-last}}
pub fn {{classFilename}}(&self) -> &{{classFilename}}::{{classname}}{
pub fn {{classFilename}}(&self) -> &::apis::{{classname}}{
self.{{classFilename}}.as_ref()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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}}
}

Expand All @@ -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}}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ mod {{{classFilename}}};
pub use self::{{{classFilename}}}::{{{classname}}};
{{/model}}
{{/models}}

// TODO(farcaller): sort out files
pub struct File;