Skip to content

Commit e886bae

Browse files
committed
Input parameters can support multiple types; update handle function to &mut
1 parent 10f4ccc commit e886bae

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

src/jsonrpc2.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub trait THandler<S, R, E>
3636
where
3737
S: Serialize,
3838
{
39-
async fn handle(&self, conn: Arc<JsonRpc2<S, R, E>>, request: Request<S>);
39+
async fn handle(&mut self, conn: Arc<JsonRpc2<S, R, E>>, request: Request<S>);
4040
}
4141

4242
pub struct Conn {
@@ -150,7 +150,7 @@ async fn json_rpc2_run_loop<S, R, E>(
150150
if let Some(any_message_data) = any_message {
151151
match any_message_data {
152152
AnyMessage::Request(req) => {
153-
if let Some(handler) = handler.take() {
153+
if let Some(mut handler) = handler.take() {
154154
handler.handle(json_rpc2, req).await;
155155
}
156156
}
@@ -293,6 +293,7 @@ mod tests {
293293
use crate::stream_ws::ClientObjectStream;
294294
use crate::stream_ws::ServerObjectStream;
295295
use async_trait::async_trait;
296+
use serde::{Deserialize, Serialize};
296297
use std::str::FromStr;
297298
use std::sync::Arc;
298299
use tokio::net::TcpListener;
@@ -315,10 +316,18 @@ mod tests {
315316
assert_eq!(request, req2);
316317
}
317318

319+
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
320+
#[serde(untagged)]
321+
pub enum Parameter {
322+
Receiver(Vec<u32>),
323+
Sender(String),
324+
}
325+
318326
#[test]
319327
fn test_any_message_request() {
320328
let method = String::from_str("add").unwrap();
321-
let params = vec![1_u32, 2_u32];
329+
let params = Parameter::Receiver(vec![1_u32, 2_u32]);
330+
println!("parameter:{}", serde_json::to_string(&params).unwrap());
322331
let id = Id::Number(3);
323332

324333
let request = Request::new(method, Some(params), Some(id));
@@ -327,7 +336,7 @@ mod tests {
327336
let marshal_msg = serde_json::to_string(&request_any).unwrap();
328337
println!("marshal AnyMessage request: {}", marshal_msg);
329338

330-
let data: AnyMessage<Vec<u32>, String, String> =
339+
let data: AnyMessage<Parameter, String, String> =
331340
serde_json::from_str(&marshal_msg).unwrap();
332341

333342
assert_eq!(request_any, data);
@@ -357,7 +366,7 @@ mod tests {
357366
#[async_trait]
358367
impl THandler<RequestParams, ResponseResult, ErrorData> for Add {
359368
async fn handle(
360-
&self,
369+
&mut self,
361370
json_rpc2: Arc<JsonRpc2<RequestParams, ResponseResult, ErrorData>>,
362371
request: Request<RequestParams>,
363372
) {

0 commit comments

Comments
 (0)