@@ -5,16 +5,12 @@ use std::{
55
66use ae:: anti_replay:: ValidatorRef ;
77use duplicate:: duplicate_item;
8+ use serde:: { Serialize , de:: DeserializeOwned } ;
89use thiserror:: Error ;
910use tokio:: io:: { AsyncRead , AsyncWrite } ;
1011use tracing:: { instrument, trace} ;
1112
1213pub const MAX_HEADER_LEN : usize = 1024 ;
13- const BINCODE_CONFIG : bincode:: config:: Configuration <
14- bincode:: config:: LittleEndian ,
15- bincode:: config:: Varint ,
16- bincode:: config:: NoLimit ,
17- > = bincode:: config:: standard ( ) ;
1814
1915pub trait AsHeader { }
2016
@@ -31,7 +27,7 @@ pub async fn read_header<Reader, Header>(
3127) -> Result < Header , CodecError >
3228where
3329 Reader : reader_bounds ,
34- Header : std:: fmt:: Debug + AsHeader + bincode :: Decode < ( ) > ,
30+ Header : std:: fmt:: Debug + AsHeader + DeserializeOwned ,
3531{
3632 let mut buf = [ 0 ; MAX_HEADER_LEN * 2 ] ;
3733 let mut start_pos = 0 ;
6157 } ,
6258 } ;
6359 let hdr_buf = & buf[ start_pos..end_pos] ;
64- let mut rdr = io:: Cursor :: new ( hdr_buf) ;
65- let header = bincode:: decode_from_std_read ( & mut rdr, BINCODE_CONFIG ) ?;
60+ let header = postcard:: from_bytes ( hdr_buf) ?;
6661 trace ! ( ?header, "Read header" ) ;
6762
6863 Ok ( header)
@@ -81,13 +76,10 @@ pub async fn write_header<Writer, Header>(
8176) -> Result < ( ) , CodecError >
8277where
8378 Writer : writer_bounds ,
84- Header : std:: fmt:: Debug + AsHeader + bincode :: Encode ,
79+ Header : std:: fmt:: Debug + AsHeader + Serialize ,
8580{
8681 let mut hdr_buf = [ 0 ; MAX_HEADER_LEN ] ;
87- let mut hdr_wtr = io:: Cursor :: new ( & mut hdr_buf[ ..] ) ;
88- bincode:: encode_into_std_write ( header, & mut hdr_wtr, BINCODE_CONFIG ) ?;
89- let len = hdr_wtr. position ( ) ;
90- let hdr_buf = & hdr_buf[ ..len as usize ] ;
82+ let hdr_buf = postcard:: to_slice ( header, & mut hdr_buf) ?;
9183
9284 let timestamped = true ;
9385 let mut buf = [ 0 ; MAX_HEADER_LEN * 2 ] ;
@@ -121,7 +113,7 @@ pub async fn timed_read_header_async<Reader, Header>(
121113) -> Result < Header , CodecError >
122114where
123115 Reader : AsyncRead + Unpin ,
124- Header : std:: fmt:: Debug + AsHeader + bincode :: Decode < ( ) > ,
116+ Header : std:: fmt:: Debug + AsHeader + DeserializeOwned ,
125117{
126118 let res = tokio:: time:: timeout ( timeout, read_header_async ( reader, key, validator) ) . await ;
127119 match res {
@@ -141,7 +133,7 @@ pub async fn timed_write_header_async<Writer, Header>(
141133) -> Result < ( ) , CodecError >
142134where
143135 Writer : AsyncWrite + Unpin ,
144- Header : std:: fmt:: Debug + AsHeader + bincode :: Encode ,
136+ Header : std:: fmt:: Debug + AsHeader + Serialize ,
145137{
146138 let res = tokio:: time:: timeout ( timeout, write_header_async ( writer, header, key) ) . await ;
147139 match res {
@@ -157,10 +149,8 @@ where
157149pub enum CodecError {
158150 #[ error( "IO error: {0}" ) ]
159151 Io ( #[ from] io:: Error ) ,
160- #[ error( "Encode error: {0}" ) ]
161- Encode ( #[ from] bincode:: error:: EncodeError ) ,
162- #[ error( "Decode error: {0}" ) ]
163- Decode ( #[ from] bincode:: error:: DecodeError ) ,
152+ #[ error( "Codec error: {0}" ) ]
153+ Codec ( #[ from] postcard:: Error ) ,
164154 #[ error( "Data tempered" ) ]
165155 Integrity ,
166156}
0 commit comments