diff --git a/README.md b/README.md index 1fd2dd9..529ea28 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,7 @@ arguments to tarpc fns. Add to your `Cargo.toml` dependencies: ```toml -tarpc = "0.12.0" -tarpc-plugins = "0.4.0" +tarpc = "0.13.0" ``` @@ -54,16 +53,20 @@ races! Here's a small service. ```rust -#![feature(plugin, futures_api, pin, arbitrary_self_types, await_macro, async_await)] -#![plugin(tarpc_plugins)] +#![feature( + futures_api, + pin, + arbitrary_self_types, + await_macro, + async_await, + proc_macro_hygiene, +)] use futures::{ - compat::TokioDefaultSpawner, future::{self, Ready}, prelude::*, - spawn, }; -use tarpc::rpc::{ +use rpc::{ client, context, server::{self, Handler, Server}, }; @@ -71,6 +74,7 @@ use std::io; // This is the service definition. It looks a lot like a trait definition. // It defines one RPC, hello, which takes one arg, name, and returns a String. + tarpc::service! { rpc hello(name: String) -> String; } @@ -103,20 +107,20 @@ async fn run() -> io::Result<()> { .incoming(transport) // Close the stream after the client connects .take(1) - // serve is generated by the service! macro. It takes as input any type implementing + // serve is generated by the tarpc::service! macro. It takes as input any type implementing // the generated Service trait. .respond_with(serve(HelloServer)); - spawn!(server).unwrap(); + tokio_executor::spawn(server.unit_error().boxed().compat()); let transport = await!(bincode_transport::connect(&addr))?; - // new_stub is generated by the service! macro. Like Server, it takes a config and any + // new_stub is generated by the tarpc::service! macro. Like Server, it takes a config and any // Transport as input, and returns a Client, also generated by the macro. // by the service mcro. - let mut client = await!(new_stub(client::Config::default(), transport)); + let mut client = await!(new_stub(client::Config::default(), transport))?; - // The client has an RPC method for each RPC defined in service!. It takes the same args + // The client has an RPC method for each RPC defined in tarpc::service!. It takes the same args // as defined, with the addition of a Context, which is always the first arg. The Context // specifies a deadline and trace information which can be helpful in debugging requests. let hello = await!(client.hello(context::current(), "Stim".to_string()))?; @@ -127,10 +131,11 @@ async fn run() -> io::Result<()> { } fn main() { - tokio::run(run() + tokio::run( + run() .map_err(|e| eprintln!("Oh no: {}", e)) .boxed() - .compat(TokioDefaultSpawner), + .compat(), ); } ```