Skip to content

Commit 8ec7727

Browse files
committed
Add Cenc::encode/decode_with_len
The same as Cenc::encode/decode except it also returns the # of bytes encoded and decoded
1 parent 2ed7ae3 commit 8ec7727

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

src/lib.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff 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>`

0 commit comments

Comments
 (0)