grpc 0.6.2

Rust implementation of gRPC
Documentation
#[macro_use]
extern crate log;
extern crate env_logger;

extern crate futures;
extern crate grpc;

mod test_misc;

use grpc::rt::*;
use grpc::*;

use test_misc::*;

fn echo_fn(_: RequestOptions, req: String) -> SingleResponse<String> {
    SingleResponse::completed(req)
}

fn reverse_fn(_: RequestOptions, req: String) -> SingleResponse<String> {
    SingleResponse::completed(req.chars().rev().collect())
}

#[test]
fn multiple_services() {
    drop(env_logger::try_init());

    let mut server = ServerBuilder::new_plain();
    server.http.set_port(0);

    let echo = string_string_method("/foo/echo", GrpcStreaming::Unary);
    let reverse = string_string_method("/bar/reverse", GrpcStreaming::Unary);

    server.add_service(ServerServiceDefinition::new(
        "/foo",
        vec![ServerMethod::new(
            echo.clone(),
            MethodHandlerUnary::new(echo_fn),
        )],
    ));

    server.add_service(ServerServiceDefinition::new(
        "/bar",
        vec![ServerMethod::new(
            reverse.clone(),
            MethodHandlerUnary::new(reverse_fn),
        )],
    ));

    let server = server.build().expect("server");

    let port = server.local_addr().port().expect("port");

    let client = Client::new_plain(BIND_HOST, port, ClientConf::new()).expect("client");

    assert_eq!(
        "abc".to_owned(),
        client
            .call_unary(RequestOptions::new(), "abc".to_owned(), echo)
            .wait_drop_metadata()
            .unwrap()
    );

    assert_eq!(
        "zyx".to_owned(),
        client
            .call_unary(RequestOptions::new(), "xyz".to_owned(), reverse)
            .wait_drop_metadata()
            .unwrap()
    );
}

#[cfg(unix)]
#[test]
fn single_service_unix() {
    let test_socket_address = "/tmp/grpc_rust_single_service_unix";
    let mut server = ServerBuilder::new_plain();
    server
        .http
        .set_unix_addr(test_socket_address.to_owned())
        .unwrap();

    let echo = string_string_method("/foo/echo", GrpcStreaming::Unary);
    let reverse = string_string_method("/bar/reverse", GrpcStreaming::Unary);

    server.add_service(ServerServiceDefinition::new(
        "/foo",
        vec![ServerMethod::new(
            echo.clone(),
            MethodHandlerUnary::new(echo_fn),
        )],
    ));

    server.add_service(ServerServiceDefinition::new(
        "/bar",
        vec![ServerMethod::new(
            reverse.clone(),
            MethodHandlerUnary::new(reverse_fn),
        )],
    ));

    let _server = server.build().expect("server");

    let client = Client::new_plain_unix(test_socket_address, ClientConf::new()).expect("client");

    assert_eq!(
        "abc".to_owned(),
        client
            .call_unary(RequestOptions::new(), "abc".to_owned(), echo)
            .wait_drop_metadata()
            .unwrap()
    );

    assert_eq!(
        "zyx".to_owned(),
        client
            .call_unary(RequestOptions::new(), "xyz".to_owned(), reverse)
            .wait_drop_metadata()
            .unwrap()
    );
}