openapi-codegen 0.1.0

Automatically generate rust HTTP clients from OpenAPI files.
Documentation
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}}