tokio-thrift-codegen 0.1.0

code generation library of tokio-thrift
Documentation
#[allow(dead_code, non_camel_case_types)]
type {{service.ident}}ClientProto = ::tokio_thrift::tokio::ThriftProto<{{service.ident}}ServiceMethodArgs, {{service.ident}}ServiceMethodReturn>;

#[allow(dead_code, non_snake_case, non_camel_case_types)]
pub struct {{service.ident}}Client<T: 'static+::tokio_core::io::Io> {
    #[allow(dead_code, non_snake_case)]
    client: ::tokio_proto::pipeline::ClientService<T, {{service.ident}}ClientProto>,
}

impl <T: 'static+::tokio_core::io::Io>{{service.ident}}Client<T> {
    pub fn new(client: ::tokio_proto::pipeline::ClientService<T, {{service.ident}}ClientProto>) -> Self {
        {{service.ident}}Client {
            client: client,
        }
    }
}

impl <T: 'static+::tokio_core::io::Io>{{service.ident}}Service for {{service.ident}}Client<T> {
    {{~#each service.methods as |method|}}
    {{> method method = method}} {
        use futures::Future;
        use tokio_service::Service;
        use {{../namespace}}::{{../service.ident}}ServiceMethodArgs::*;
        use {{../namespace}}::{{../service.ident}}ServiceMethodReturn::*;
        let args = {{../service.ident}}{{method.ident}}Args {
            {{~#each args as |arg| }}
            {{arg.ident}}: {{arg.ident}},
            {{~/each}}
        };
        self.client
            .call(A{{method.ident}}(args))
            .then(|ret| match ret {
                Ok(R{{method.ident}}(Ok(s))) => Ok(s),
                Ok(R{{method.ident}}(Err(_))) |
                Err(_) => panic!("exception is not supported yet"),
                Ok(_) => panic!("tokio-thrift internal error. may be a bug"),
            }).boxed()
    }
{{~/each}}
}