1 unstable release
0.1.0 | Dec 10, 2019 |
---|
#41 in #jsonrpc
Used in jsonrpc-v2
10KB
213 lines
jsonrpc-v2
A very small and very fast JSON-RPC 2.0 server-focused framework.
Provides integrations for both hyper
and actix-web
. Enable features actix-integration
or hyper-integration
depending on need.
actix
is enabled by default. Make sure to add default-features = false
if using hyper
.
Also see the easy-errors
feature flag (not enabled by default). Enabling this flag will implement ErrorLike
for anything that implements Display
, and the display value will be provided in the message
field of the JSON-RPC 2.0 Error
response.
Otherwise, custom errors should implement ErrorLike
to map errors to the JSON-RPC 2.0 Error
response.
Individual method handlers are async
functions that can take various kinds of args (things that can be extracted from the request, like
the Params
or Data
), and should return a Result<Item, Error>
where the Item
is serializable. See examples below.
Usage
use jsonrpc_v2::*;
#[derive(serde::Deserialize)]
struct TwoNums {
a: usize,
b: usize,
}
async fn add(Params(params): Params<TwoNums>) -> Result<usize, Error> {
Ok(params.a + params.b)
}
async fn sub(Params(params): Params<(usize, usize)>) -> Result<usize, Error> {
Ok(params.0 - params.1)
}
async fn message(data: Data<String>) -> Result<String, Error> {
Ok(String::from(&*data))
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let rpc = Server::new()
.with_data(Data::new(String::from("Hello!")))
.with_method("sub", sub)
.with_method("message", message)
.finish();
actix_web::HttpServer::new(move || {
let rpc = rpc.clone();
actix_web::App::new().service(
actix_web::web::service("/api")
.guard(actix_web::guard::Post())
.finish(rpc.into_web_service()),
)
})
.bind("0.0.0.0:3000")?
.run()?;
Ok(())
}
Current version: 0.4.1
License: MIT
Dependencies
~1.5MB
~37K SLoC