rust-server.example-client-main.mustache Maven / Gradle / Ivy
#![allow(missing_docs, unused_variables, trivial_casts)]
{{#hasCallbacks}}
mod server;
{{/hasCallbacks}}
#[allow(unused_imports)]
use futures::{future, Stream, stream};
#[allow(unused_imports)]
use {{{externCrateName}}}::{Api, ApiNoContext, Client, ContextWrapperExt, models,
{{#apiInfo}}
{{#apis}}
{{#operations}}
{{#operation}}
{{{operationId}}}Response,
{{/operation}}
{{/operations}}
{{/apis}}
{{/apiInfo}}
};
use clap::{App, Arg};
#[allow(unused_imports)]
use log::info;
// swagger::Has may be unused if there are no examples
#[allow(unused_imports)]
use swagger::{AuthData, ContextBuilder, EmptyContext, Has, Push, XSpanIdString};
type ClientContext = swagger::make_context_ty!(ContextBuilder, EmptyContext, Option, XSpanIdString);
// rt may be unused if there are no examples
#[allow(unused_mut)]
fn main() {
env_logger::init();
let matches = App::new("client")
.arg(Arg::with_name("operation")
.help("Sets the operation to run")
.possible_values(&[
{{#apiInfo}}
{{#apis}}
{{#operations}}
{{#operation}}
{{#vendorExtensions}}
{{^x-no-client-example}}
"{{{operationId}}}",
{{/x-no-client-example}}
{{/vendorExtensions}}
{{/operation}}
{{/operations}}
{{/apis}}
{{/apiInfo}}
])
.required(true)
.index(1))
.arg(Arg::with_name("https")
.long("https")
.help("Whether to use HTTPS or not"))
.arg(Arg::with_name("host")
.long("host")
.takes_value(true)
.default_value("{{{serverHost}}}")
.help("Hostname to contact"))
.arg(Arg::with_name("port")
.long("port")
.takes_value(true)
.default_value("{{{serverPort}}}")
.help("Port to contact"))
.get_matches();
let is_https = matches.is_present("https");
let base_url = format!("{}://{}:{}",
if is_https { "https" } else { "http" },
matches.value_of("host").unwrap(),
matches.value_of("port").unwrap());
let context: ClientContext =
swagger::make_context!(ContextBuilder, EmptyContext, None as Option, XSpanIdString::default());
let mut client : Box> = if matches.is_present("https") {
// Using Simple HTTPS
let client = Box::new(Client::try_new_https(&base_url)
.expect("Failed to create HTTPS client"));
Box::new(client.with_context(context))
} else {
// Using HTTP
let client = Box::new(Client::try_new_http(
&base_url)
.expect("Failed to create HTTP client"));
Box::new(client.with_context(context))
};
let mut rt = tokio::runtime::Runtime::new().unwrap();
{{#hasCallbacks}}
// We could do HTTPS here, but for simplicity we don't
rt.spawn(server::create("127.0.0.1:8081", false));
{{/hasCallbacks}}
match matches.value_of("operation") {
{{#apiInfo}}
{{#apis}}
{{#operations}}
{{#operation}}
{{#vendorExtensions}}
{{#x-no-client-example}}
/* Disabled because there's no example.
{{/x-no-client-example}}
{{/vendorExtensions}}
Some("{{{operationId}}}") => {
let result = rt.block_on(client.{{{vendorExtensions.x-operation-id}}}(
{{#allParams}}
{{{vendorExtensions.x-example}}}{{^-last}},{{/-last}}
{{/allParams}}
));
info!("{:?} (X-Span-ID: {:?})", result, (client.context() as &dyn Has).get().clone());
},
{{#vendorExtensions}}
{{#x-no-client-example}}
*/
{{/x-no-client-example}}
{{/vendorExtensions}}
{{/operation}}
{{/operations}}
{{/apis}}
{{/apiInfo}}
_ => {
panic!("Invalid operation provided")
}
}
}