use rpc_router::{FromResources, Handler, HandlerResult, IntoParams, Resources, Router, RpcRequest};
use serde::Deserialize;
use serde_json::json;
#[derive(Clone)]
pub struct ModelManager {}
impl FromResources for ModelManager {}
#[derive(Deserialize)]
pub struct ParamsIded {
pub id: i64,
}
impl IntoParams for ParamsIded {}
pub async fn increment_id(_mm: ModelManager, params: ParamsIded) -> HandlerResult<i64> {
Ok(params.id + 9000)
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let rpc_router = Router::builder()
.append_dyn("increment_id", increment_id.into_dyn())
.build();
let rpc_request: RpcRequest = json!({
"jsonrpc": "2.0",
"id": null, "method": "increment_id",
"params": {
"id": 123
}
})
.try_into()?;
let rpc_resources = Resources::builder().append(ModelManager {}).build();
let call_result = rpc_router.call_with_resources(rpc_request, rpc_resources).await;
match call_result {
Ok(call_response) => println!(
"Success: rpc-id {:?}, method: {}, returned value: {:?}",
call_response.id, call_response.method, call_response.value
),
Err(call_error) => println!(
"Error: rpc-id {:?}, method: {}, error {:?}",
call_error.id, call_error.method, call_error.error
),
}
Ok(())
}