jsonrpc-v2 0.4.1

JSONRPC 2.0 server
Documentation
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(state: State<String>) -> Result<String, Error> {
    Ok(String::from(&*state))
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let rpc = Server::with_state(String::from("Hello!"))
        .with_method("add", add)
        .with_method("sub", sub)
        .with_method("message", message)
        .finish_direct();

    let req = RequestObject::request()
        .with_method("sub")
        .with_params(serde_json::json!([12, 12]))
        .finish()?;

    let res = rpc.handle(req).await.unwrap();

    println!("{}", serde_json::to_string_pretty(&res)?);

    Ok(())
}