File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -220,6 +220,26 @@ pub trait CompactEncoding<Decode: ?Sized = Self> {
220220 fn create_buffer ( & self ) -> Result < Vec < u8 > , EncodingError > {
221221 Ok ( vec ! [ 0 ; self . encoded_size( ) ?] )
222222 }
223+
224+ /// Like [`CompactEncoding::encode`] but also return the number of bytes encoded.
225+ fn encode_with_len < ' a > (
226+ & self ,
227+ buffer : & ' a mut [ u8 ] ,
228+ ) -> Result < ( & ' a mut [ u8 ] , usize ) , EncodingError > {
229+ let before_len = buffer. len ( ) ;
230+ let rest = self . encode ( buffer) ?;
231+ let num_encoded_bytes = before_len - rest. len ( ) ;
232+ Ok ( ( rest, num_encoded_bytes) )
233+ }
234+
235+ /// Like [`CompactEncoding::decode`] but also return the number of bytes decoded.
236+ fn decode_with_len ( buffer : & [ u8 ] ) -> Result < ( Decode , & [ u8 ] , usize ) , EncodingError >
237+ where
238+ Decode : Sized ,
239+ {
240+ let ( out, rest) = Self :: decode ( buffer) ?;
241+ Ok ( ( out, rest, buffer. len ( ) - rest. len ( ) ) )
242+ }
223243}
224244
225245/// Implement this for type `T` to have `CompactEncoding` implemented for `Vec<T>`
You can’t perform that action at this time.
0 commit comments