//! A simple example #![deny(missing_docs)] use tetsy_jsonrpc_core::futures::future::{self, Future, FutureResult}; use tetsy_jsonrpc_core::{Error, IoHandler, Result}; use tetsy_jsonrpc_core_client::transports::local; use tetsy_jsonrpc_derive::rpc; /// Rpc trait #[rpc] pub trait Rpc { /// Returns a protocol version. #[rpc(name = "protocolVersion")] fn protocol_version(&self) -> Result; /// Adds two numbers and returns a result. #[rpc(name = "add", alias("callAsyncMetaAlias"))] fn add(&self, a: u64, b: u64) -> Result; /// Performs asynchronous operation. #[rpc(name = "callAsync")] fn call(&self, a: u64) -> FutureResult; /// Handles a notification. #[rpc(name = "notify")] fn notify(&self, a: u64); } struct RpcImpl; impl Rpc for RpcImpl { fn protocol_version(&self) -> Result { Ok("version1".into()) } fn add(&self, a: u64, b: u64) -> Result { Ok(a + b) } fn call(&self, _: u64) -> FutureResult { future::ok("OK".to_owned()) } fn notify(&self, a: u64) { println!("Received `notify` with value: {}", a); } } fn main() { let mut io = IoHandler::new(); io.extend_with(RpcImpl.to_delegate()); let fut = { let (client, server) = local::connect::(io); client.add(5, 6).map(|res| println!("5 + 6 = {}", res)).join(server) }; fut.wait().unwrap(); }