@@ -67,9 +67,9 @@ impl Header {
6767 match & mut hdr. as_slice ( ) {
6868 [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] => Ok ( None ) ,
6969 buf => {
70- let min_tx_offset = buf. get_u64 ( ) . map_err ( decode_error ) ?;
71- let n = buf. get_u16 ( ) . map_err ( decode_error ) ?;
72- let len = buf. get_u32 ( ) . map_err ( decode_error ) ?;
70+ let min_tx_offset = buf. get_u64 ( ) . map_err ( |e| decode_header_error ( e , "min_tx_offset" ) ) ?;
71+ let n = buf. get_u16 ( ) . map_err ( |e| decode_header_error ( e , "n" ) ) ?;
72+ let len = buf. get_u32 ( ) . map_err ( |e| decode_header_error ( e , "len" ) ) ?;
7373
7474 Ok ( Some ( Self {
7575 min_tx_offset,
@@ -88,15 +88,15 @@ impl Header {
8888 return Ok ( None ) ;
8989 }
9090
91- return Err ( e ) ;
91+ return Err ( io :: Error :: new ( e . kind ( ) , format ! ( "error reading commit header: {e}" ) ) ) ;
9292 }
9393 match & mut hdr. as_slice ( ) {
9494 [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] => Ok ( None ) ,
9595 buf => {
96- let min_tx_offset = buf. get_u64 ( ) . map_err ( decode_error ) ?;
97- let epoch = buf. get_u64 ( ) . map_err ( decode_error ) ?;
98- let n = buf. get_u16 ( ) . map_err ( decode_error ) ?;
99- let len = buf. get_u32 ( ) . map_err ( decode_error ) ?;
96+ let min_tx_offset = buf. get_u64 ( ) . map_err ( |e| decode_header_error ( e , "min_tx_offset" ) ) ?;
97+ let epoch = buf. get_u64 ( ) . map_err ( |e| decode_header_error ( e , "epoch" ) ) ?;
98+ let n = buf. get_u16 ( ) . map_err ( |e| decode_header_error ( e , "n" ) ) ?;
99+ let len = buf. get_u32 ( ) . map_err ( |e| decode_header_error ( e , "len" ) ) ?;
100100
101101 Ok ( Some ( Self {
102102 min_tx_offset,
@@ -310,10 +310,16 @@ impl StoredCommit {
310310 return Ok ( None ) ;
311311 } ;
312312 let mut records = vec ! [ 0 ; hdr. len as usize ] ;
313- reader. read_exact ( & mut records) ?;
313+ reader. read_exact ( & mut records) . map_err ( |e| {
314+ io:: Error :: new (
315+ e. kind ( ) ,
316+ format ! ( "failed to read {} bytes of commit payload: {}" , hdr. len, e) ,
317+ )
318+ } ) ?;
314319
315320 let chk = reader. crc32c ( ) ;
316- let crc = decode_u32 ( reader. into_inner ( ) ) ?;
321+ let crc = decode_u32 ( reader. into_inner ( ) )
322+ . map_err ( |e| io:: Error :: new ( e. kind ( ) , format ! ( "failed to read checksum: {e}" ) ) ) ?;
317323
318324 if chk != crc {
319325 return Err ( invalid_data ( ChecksumMismatch ) ) ;
@@ -385,8 +391,8 @@ fn decode_u32<R: Read>(mut read: R) -> io::Result<u32> {
385391 Ok ( u32:: from_le_bytes ( buf) )
386392}
387393
388- fn decode_error ( e : DecodeError ) -> io:: Error {
389- invalid_data ( e )
394+ fn decode_header_error ( e : DecodeError , field : & str ) -> io:: Error {
395+ invalid_data ( format ! ( "failed to decode commit header field '{field}': {e}" ) )
390396}
391397
392398fn invalid_data < E > ( e : E ) -> io:: Error
0 commit comments