@@ -36,7 +36,7 @@ pub trait THandler<S, R, E>
3636where
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
4242pub 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