@@ -20,9 +20,50 @@ mod reg;
2020mod xfer;
2121mod xfer_dlist_handle;
2222
23+ mod codec {
24+ use super :: * ;
25+
26+ pub fn reserve_capacity ( buf : & mut Vec < u8 > , additional : usize ) {
27+ let needed = buf. len ( ) . saturating_add ( additional) ;
28+ if buf. capacity ( ) < needed { buf. reserve ( needed - buf. capacity ( ) ) ; }
29+ }
30+
31+ pub fn write_u8 ( buf : & mut Vec < u8 > , v : u8 ) { buf. push ( v) ; }
32+
33+ pub fn write_u64 ( buf : & mut Vec < u8 > , v : u64 ) { buf. extend_from_slice ( & v. to_le_bytes ( ) ) ; }
34+
35+ pub fn read_bytes < ' a > ( data : & ' a [ u8 ] , off : & mut usize , len : usize ) -> Result < & ' a [ u8 ] , NixlError > {
36+ let end = off. checked_add ( len) . ok_or ( NixlError :: InvalidParam ) ?;
37+ let slice = data. get ( * off..end) . ok_or ( NixlError :: InvalidParam ) ?;
38+ * off = end;
39+ Ok ( slice)
40+ }
41+
42+ pub fn read_u8 ( data : & [ u8 ] , off : & mut usize ) -> Result < u8 , NixlError > {
43+ Ok ( read_bytes ( data, off, 1 ) ?[ 0 ] )
44+ }
45+
46+ pub fn read_u64 ( data : & [ u8 ] , off : & mut usize ) -> Result < u64 , NixlError > {
47+ let bytes = read_bytes ( data, off, 8 ) ?;
48+ let arr: [ u8 ; 8 ] = bytes. try_into ( ) . map_err ( |_| NixlError :: InvalidParam ) ?;
49+ Ok ( u64:: from_le_bytes ( arr) )
50+ }
51+
52+ pub fn write_header ( buf : & mut Vec < u8 > , mem_type : MemType , count : usize ) {
53+ write_u8 ( buf, mem_type as u8 ) ;
54+ write_u64 ( buf, count as u64 ) ;
55+ }
56+
57+ pub fn read_header ( data : & [ u8 ] , off : & mut usize ) -> Result < ( MemType , usize ) , NixlError > {
58+ let mem = MemType :: from ( read_u8 ( data, off) ? as nixl_capi_mem_type_t ) ;
59+ let count = read_u64 ( data, off) ? as usize ;
60+ Ok ( ( mem, count) )
61+ }
62+ }
63+
2364pub use query:: { QueryResponse , QueryResponseIterator , QueryResponseList } ;
24- pub use reg:: RegDescList ;
25- pub use xfer:: XferDescList ;
65+ pub use reg:: { RegDescList , RegDescriptor } ;
66+ pub use xfer:: { XferDescList , XferDescriptor } ;
2667pub use xfer_dlist_handle:: XferDlistHandle ;
2768
2869/// Memory types supported by NIXL
0 commit comments