Skip to content

paritytech/jsonrpc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Parity JSON-RPC

NOTE: This crate is no longer actively developed; please have a look at our jsonrpsee crate if you're looking for an actively maintained JSON RPC implementation.

Rust implementation of JSON-RPC 2.0 Specification. Transport-agnostic core and transport servers for http, ipc, websockets and tcp.

New! Support for clients.

Documentation

Sub-projects

Examples

Basic Usage (with HTTP transport)

use jsonrpc_http_server::jsonrpc_core::{IoHandler, Value, Params}; use jsonrpc_http_server::ServerBuilder; fn main() { let mut io = IoHandler::default();	io.add_method("say_hello", |_params: Params| async { Ok(Value::String("hello".to_owned())) }); let server = ServerBuilder::new(io) .threads(3) .start_http(&"127.0.0.1:3030".parse().unwrap()) .unwrap();	server.wait(); }

Basic usage with derive

use jsonrpc_core::Result; use jsonrpc_derive::rpc; #[rpc] pub trait Rpc { /// Adds two numbers and returns a result #[rpc(name = "add")] fn add(&self, a: u64, b: u64) -> Result<u64>; } pub struct RpcImpl; impl Rpc for RpcImpl { fn add(&self, a: u64, b: u64) -> Result<u64> { Ok(a + b) } } fn main() { let mut io = jsonrpc_core::IoHandler::new();	io.extend_with(RpcImpl.to_delegate()) }

Client support

use jsonrpc_core_client::transports::local; use jsonrpc_core::{BoxFuture, IoHandler, Result}; use jsonrpc_core::futures::{self, future, TryFutureExt}; use jsonrpc_derive::rpc; /// Rpc trait #[rpc] pub trait Rpc { /// Returns a protocol version #[rpc(name = "protocolVersion")] fn protocol_version(&self) -> Result<String>; /// Adds two numbers and returns a result #[rpc(name = "add", alias("callAsyncMetaAlias"))] fn add(&self, a: u64, b: u64) -> Result<u64>; /// Performs asynchronous operation #[rpc(name = "callAsync")] fn call(&self, a: u64) -> BoxFuture<Result<String>>; } struct RpcImpl; impl Rpc for RpcImpl { fn protocol_version(&self) -> Result<String> { Ok("version1".into()) } fn add(&self, a: u64, b: u64) -> Result<u64> { Ok(a + b) } fn call(&self, _: u64) -> BoxFuture<Result<String>> { Box::pin(future::ready(Ok("OK".to_owned()))) } } fn main() { let mut io = IoHandler::new();	io.extend_with(RpcImpl.to_delegate()); let (client, server) = local::connect::<gen_client::Client, _, _>(io); let fut = client.add(5, 6).map_ok(|res| println!("5 + 6 = {}", res));	futures::executor::block_on(async move { futures::join!(fut, server) }) .0 .unwrap(); }

About

Rust JSON-RPC implementation

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 69