use async_trait::async_trait; use json_rpc2::{futures::*, Request, Response, Result}; use serde_json::Value; struct ServiceHandler; #[async_trait] impl Service for ServiceHandler { type Data = (); async fn handle( &self, request: &Request, _ctx: &Self::Data, ) -> Result> { let response = match request.method() { "hello" => { let params: String = request.deserialize()?; let message = format!("Hello, {}!", params); Some((request, Value::String(message)).into()) } _ => None, }; Ok(response) } } #[tokio::main] async fn main() -> Result<()> { let service: Box> = Box::new(ServiceHandler {}); let request = Request::new_reply("hello", Some(Value::String("world".to_string()))); let server = Server::new(vec![&service]); let response = server.serve(&request, &()).await; println!("{:?}", response.as_ref().unwrap().result()); assert_eq!( Some(Value::String("Hello, world!".to_string())), response.unwrap().into() ); Ok(()) }