Module roa::jsonrpc

source · []
This is supported on crate feature jsonrpc only.
Expand description

roa::jsonrpc

This module provides a json rpc endpoint.

Example

use roa::App;
use roa::jsonrpc::{RpcEndpoint, Data, Error, Params, Server};
use roa::tcp::Listener;
use tracing::info;

#[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))
}

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let rpc = Server::new()
        .with_data(Data::new(String::from("Hello!")))
        .with_method("sub", sub)
        .with_method("message", message)
        .finish_unwrapped();

    let app = App::new().end(RpcEndpoint(rpc));
    app.listen("127.0.0.1:8000", |addr| {
        info!("Server is listening on {}", addr)
    })?
    .await?;
    Ok(())
}

Re-exports

pub use jsonrpc_v2::*;

Structs

A wrapper for jsonrpc_v2::Server, implemented roa::Endpoint.