use std::borrow::Borrow;
use failure;
use hyper;
#[allow(unused_imports)]
use serde_json::Value;
use super::request as _internal_request;
use super::configuration::Configuration;
#[allow(unused_imports)]
use super::super::models::*;
pub struct {{pascal_id}}ApiClient {
configuration: Configuration,
}
impl {{pascal_id}}ApiClient {
pub fn new(configuration: Configuration) -> Self {
Self {
configuration: configuration,
}
}
{{~#each methods}}
pub fn r#{{snake_id}}(
&self,
{{~#each path_parameters}}
r#{{snake_id}}: {{type}},{{/each}}
{{~#each query_parameters}}
r#{{snake_id}}: {{type}},{{/each}}
{{~#if body}}
r#{{body.snake_id}}: {{body.type}},{{/if}}
) -> Result<{{#if returns}}{{returns}}{{else}}(){{/if}}, failure::Error> {
_internal_request::Request::new(
hyper::Method::{{http_method}},
"{{path}}".to_string(),
)
{{~#each path_parameters}}
.with_path_param("{{api_id}}".to_string(), r#{{snake_id}}.to_string()){{/each}}
{{~#each query_parameters}}
.with_query_param("{{api_id}}".to_string(), r#{{snake_id}}.to_string()){{/each}}{{#if body}}
.with_body_param(r#{{body.snake_id}}){{/if}}{{#unless returns}}
.returns_nothing(){{/unless}}
.execute(self.configuration.borrow())
}{{/each}}
}
{{#if tests}}
#[cfg(test)]
mod tests {
use super::*;
#[allow(unused_imports)]
use tc_core::{Container, Image};
use tc_generic::{GenericImage, WaitFor};
use testcontainers::*;
{{~#each methods}}
#[test]
fn r#{{snake_id}}() {
client().r#{{snake_id}}(
{{~#each path_parameters}}
{{test_value}},{{/each}}
{{~#each query_parameters}}
{{test_value}},{{/each}}
{{~#if body}}
{{body.test_value}},{{/if}}
).unwrap();
}
{{/each}}
fn client() -> super::{{pascal_id}}ApiClient {
std::process::Command::new("docker")
.args(&["build", "-t=test-apisprout", "."])
.output()
.expect("failed to execute process");
let testcontainer_docker = clients::Cli::default();
let image = GenericImage::new("test-apisprout:latest")
.with_wait_for(WaitFor::message_on_stdout("Sprouting"));
let server = testcontainer_docker.run(image);
let host_port = server.get_host_port(8000).unwrap();
let url = format!("http://localhost:{}", host_port);
let configuration = Configuration::new(url);
super::{{pascal_id}}ApiClient::new(configuration)
}
}
{{/if}}