3 releases (breaking)
0.3.0 | Apr 26, 2021 |
---|---|
0.2.0 | Jan 11, 2021 |
0.1.0 | Jan 10, 2021 |
#55 in #json-rpc-client
157 downloads per month
Used in jsonrpc_client
12KB
232 lines
No bullshit JSON-RPC client for Rust
Features
- No boilerplate: Driven by proc-macros
- No client lock-in: Complete freedom over underlying HTTP client
- Lightweight: Only depends on syn and serde
- Async-ready
How does it work?
We take a trait as input to a proc-macro and output another one that has default implementations for all the functions. This allows us to take away all the boilerplate of making JSON-RPC calls and you get to define a nice interface at the same time!
How do I use it?
-
Depend on
jsonrpc_client
:[dependencies] jsonrpc_client = { version = "*", features = ["reqwest"] }
-
Define a trait that describes the JSON-RPC API you want to talk to and annotate it with
#[jsonrpc_client::api]
:#[jsonrpc_client::api] pub trait Math { async fn subtract(&self, subtrahend: i64, minuend: i64) -> i64; }
-
Define your client:
#[jsonrpc_client::implement(Math)] struct Client { inner: reqwest::Client, base_url: reqwest::Url, }
-
Start using your client!
Backends
Currently, the client supports several backends, all of them can be activated via a separate feature-flag:
- reqwest
- surf
- isahc
Support for more backends is welcomed.
Unfortunately, not all can be supported. In particular:
- hreq: Cannot be supported because their
Agent
takes&mut self
for sending a request which doesn't work with theSendRequest
trait. - awc: Cannot be supported because their
Client
does not implementSend
.
Dependencies
~1.5MB
~35K SLoC