#[derive(Debug)]
pub struct BufferWithCursor {
buffer: Vec<u8>,
cursor: usize,
}
impl BufferWithCursor {
pub fn new(buf: Vec<u8>) -> Self {
assert_eq!(
buf.len(),
buf.capacity(),
"buffer must be fully initialized"
);
Self {
buffer: buf,
cursor: 0,
}
}
pub fn remaining(&self) -> usize {
self.buffer.capacity() - self.cursor
}
pub fn is_depleted(&self) -> bool {
self.remaining() == 0
}
pub fn get_remaining(&mut self) -> &mut [u8] {
&mut self.buffer[self.cursor..]
}
pub fn advance_cursor(&mut self, n: usize) {
self.cursor += n
}
pub fn into_vec(self) -> Vec<u8> {
self.buffer
}
}