Crate tokio_jsonrpc [−] [src]
A JSON RPC protocol for the tokio framework.
This implements the handling of the
JSON RPC 2.0 specification. The low-level parts are in
the message
and the codec
modules. The first
draft of the higher-lever API is in the endpoint
module. Some helpers
to compose the server part is in the server
module.
Examples
A skeleton of reading messages from the other side, mapping them to answers and sending them back.
let mut core = Core::new().unwrap(); let handle = core.handle(); let listener = TcpListener::bind(&"127.0.0.1:2345".parse().unwrap(), &handle).unwrap(); let connections = listener.incoming(); let service = connections.for_each(|(stream, _)| { let messages = stream.framed(LineCodec::new()); let (write, read) = messages.split(); let answers = read.filter_map(|message| { match message { _ => unimplemented!(), } }); handle.spawn(write.send_all(answers).map(|_| ()).map_err(|_| ())); Ok(()) });
Provide a server that greets through an RPC.
let mut core = Core::new().unwrap(); let handle = core.handle(); let listener = TcpListener::bind(&"127.0.0.1:2346".parse().unwrap(), &handle).unwrap(); struct UselessServer; impl Server for UselessServer { type Success = String; type RpcCallResult = Result<String, RpcError>; type NotificationResult = Result<(), ()>; fn rpc(&self, ctl: &ServerCtl, method: &str, _params: &Option<Value>) -> Option<Self::RpcCallResult> { match method { // Accept a hello message and finish the greeting "hello" => Some(Ok("world".to_owned())), // When the other side says bye, terminate the connection "bye" => { ctl.terminate(); Some(Ok("bye".to_owned())) }, _ => None } } } let connections = listener.incoming().for_each(|(stream, _)| { // Greet every new connection let (client, _) = Endpoint::new(stream.framed(LineCodec::new()), UselessServer) .start(&handle); let notified = client.notify("hello".to_owned(), None) .map(|_| ()) .map_err(|_| ()); handle.spawn(notified); Ok(()) }); core.run(connections).unwrap();
Reexports
pub use codec::Boundary as BoundaryCodec; |
pub use codec::Line as LineCodec; |
pub use endpoint::Client; |
pub use endpoint::Endpoint; |
pub use endpoint::ServerCtl; |
pub use message::Message; |
pub use message::Parsed; |
pub use message::RpcError; |
pub use server::Server; |
Modules
codec |
The codecs to encode and decode messages from a stream of bytes. |
endpoint |
The endpoint of the JSON RPC connection. |
macro_exports |
This contains some reexports so macros can find them. |
message |
JSON-RPC 2.0 messages. |
server |
The |
Macros
jsonrpc_params |
Parses the parameters of an RPC or a notification. |