44//! Best for web APIs, debugging, and when message inspection is important.
55
66use rpc_core:: { Codec , Error , Result } ;
7+ use schema:: Schema ;
78use serde:: { Deserialize , Serialize } ;
89
910/// JSON codec using serde_json.
@@ -26,11 +27,11 @@ use serde::{Deserialize, Serialize};
2627pub struct JsonCodec ;
2728
2829impl Codec for JsonCodec {
29- fn encode < T : Serialize > ( & self , value : & T ) -> Result < Vec < u8 > > {
30+ fn encode < T : Serialize + Schema > ( & self , value : & T ) -> Result < Vec < u8 > > {
3031 serde_json:: to_vec ( value) . map_err ( |e| Error :: codec ( format ! ( "JSON encode error: {}" , e) ) )
3132 }
3233
33- fn decode < T : for < ' de > Deserialize < ' de > > ( & self , bytes : & [ u8 ] ) -> Result < T > {
34+ fn decode < T : for < ' de > Deserialize < ' de > + Schema > ( & self , bytes : & [ u8 ] ) -> Result < T > {
3435 serde_json:: from_slice ( bytes) . map_err ( |e| Error :: codec ( format ! ( "JSON decode error: {}" , e) ) )
3536 }
3637}
@@ -53,7 +54,7 @@ mod tests {
5354 #[ test]
5455 fn test_json_human_readable ( ) {
5556 let codec = JsonCodec ;
56- let value = ( "hello" , 42 ) ;
57+ let value = ( "hello" . to_string ( ) , 42 ) ;
5758
5859 let encoded = codec. encode ( & value) . unwrap ( ) ;
5960 let json_str = String :: from_utf8 ( encoded) . unwrap ( ) ;
@@ -65,17 +66,13 @@ mod tests {
6566
6667 #[ test]
6768 fn test_json_complex_types ( ) {
68- use std:: collections:: HashMap ;
69-
7069 let codec = JsonCodec ;
71- let mut map = HashMap :: new ( ) ;
72- map. insert ( "key1" . to_string ( ) , 42 ) ;
73- map. insert ( "key2" . to_string ( ) , 100 ) ;
70+ let value = ( 42 , "test" . to_string ( ) , true ) ;
7471
75- let encoded = codec. encode ( & map ) . unwrap ( ) ;
76- let decoded: HashMap < String , i32 > = codec. decode ( & encoded) . unwrap ( ) ;
72+ let encoded = codec. encode ( & value ) . unwrap ( ) ;
73+ let decoded: ( i32 , String , bool ) = codec. decode ( & encoded) . unwrap ( ) ;
7774
78- assert_eq ! ( map , decoded) ;
75+ assert_eq ! ( value , decoded) ;
7976 }
8077
8178 #[ test]
@@ -90,12 +87,12 @@ mod tests {
9087
9188 #[ test]
9289 fn test_json_nested_structures ( ) {
93- #[ derive( Debug , Serialize , Deserialize , PartialEq ) ]
90+ #[ derive( Debug , Serialize , Deserialize , Schema , PartialEq ) ]
9491 struct Inner {
9592 value : i32 ,
9693 }
9794
98- #[ derive( Debug , Serialize , Deserialize , PartialEq ) ]
95+ #[ derive( Debug , Serialize , Deserialize , Schema , PartialEq ) ]
9996 struct Outer {
10097 name : String ,
10198 inner : Inner ,
0 commit comments