@@ -155,8 +155,8 @@ impl Request {
155
155
RequestBody :: Talk { protocol, request } => {
156
156
let mut list = Vec :: < u8 > :: new ( ) ;
157
157
id. as_bytes ( ) . encode ( & mut list) ;
158
- protocol. encode ( & mut list) ;
159
- request. encode ( & mut list) ;
158
+ protocol. as_slice ( ) . encode ( & mut list) ;
159
+ request. as_slice ( ) . encode ( & mut list) ;
160
160
let header = Header {
161
161
list : true ,
162
162
payload_length : list. len ( ) ,
@@ -479,8 +479,8 @@ impl Message {
479
479
}
480
480
5 => {
481
481
// Talk Request
482
- let protocol = Vec :: < u8 > :: decode ( payload) ?;
483
- let request = Vec :: < u8 > :: decode ( payload) ?;
482
+ let protocol = Bytes :: decode ( payload) ?. to_vec ( ) ;
483
+ let request = Bytes :: decode ( payload) ?. to_vec ( ) ;
484
484
if !payload. is_empty ( ) {
485
485
return Err ( DecoderError :: Custom ( "Payload should be empty" ) ) ;
486
486
}
@@ -812,4 +812,50 @@ mod tests {
812
812
let data6 = [ 6 , 193 , 128 , 128 ] ;
813
813
Message :: decode ( & data6) . expect_err ( "should reject extra data" ) ;
814
814
}
815
+
816
+ #[ test]
817
+ fn test_encode_request_talk_request ( ) {
818
+ // reference input
819
+ let id = RequestId ( vec ! [ 113 , 236 , 255 , 66 , 31 , 191 , 221 , 86 ] ) ;
820
+ let message = Message :: Request ( Request {
821
+ id,
822
+ body : RequestBody :: Talk {
823
+ protocol : hex:: decode ( "757470" ) . unwrap ( ) ,
824
+ request : hex:: decode ( "0100a028839e1549000003ef001000007619dde7" ) . unwrap ( ) ,
825
+ } ,
826
+ } ) ;
827
+
828
+ // expected hex output
829
+ let expected_output =
830
+ hex:: decode ( "05e28871ecff421fbfdd5683757470940100a028839e1549000003ef001000007619dde7" )
831
+ . unwrap ( ) ;
832
+ dbg ! ( hex:: encode( message. clone( ) . encode( ) ) ) ;
833
+
834
+ let encoded_message = message. clone ( ) . encode ( ) ;
835
+ assert_eq ! ( encoded_message. clone( ) , expected_output) ;
836
+ assert_eq ! ( Message :: decode( & encoded_message) . unwrap( ) , message) ;
837
+ }
838
+
839
+ #[ test]
840
+ fn test_encode_request_talk_response ( ) {
841
+ // reference input
842
+ let id = RequestId ( vec ! [ 113 , 236 , 255 , 66 , 31 , 191 , 221 , 86 ] ) ;
843
+ let message = Message :: Response ( Response {
844
+ id,
845
+ body : ResponseBody :: Talk {
846
+ response : hex:: decode ( "0100a028839e1549000003ef001000007619dde7" ) . unwrap ( ) ,
847
+ } ,
848
+ } ) ;
849
+
850
+ // expected hex output
851
+ let expected_output =
852
+ hex:: decode ( "06de8871ecff421fbfdd56940100a028839e1549000003ef001000007619dde7" )
853
+ . unwrap ( ) ;
854
+
855
+ dbg ! ( hex:: encode( message. clone( ) . encode( ) ) ) ;
856
+
857
+ let encoded_message = message. clone ( ) . encode ( ) ;
858
+ assert_eq ! ( encoded_message. clone( ) , expected_output) ;
859
+ assert_eq ! ( Message :: decode( & encoded_message) . unwrap( ) , message) ;
860
+ }
815
861
}
0 commit comments