#[derive(Default)]
pub(crate) struct ReadBuf {
buf: Vec<u8>,
cursor: usize,
}
impl ReadBuf {
pub fn zeroed(capacity: usize) -> Self {
Self {
buf: vec![0; capacity],
cursor: 0,
}
}
pub fn extend_zeroed(&mut self, additional: usize) {
self.buf.resize(self.buf.len() + additional, 0);
}
pub fn finalize(mut self) -> Vec<u8> {
self.buf.truncate(self.cursor);
self.buf
}
pub fn len(&self) -> usize {
self.cursor
}
pub fn is_empty(&self) -> bool {
self.len() == 0
}
pub fn capacity(&self) -> usize {
self.buf.len()
}
pub fn remaining(&self) -> usize {
self.capacity() - self.len()
}
pub fn spare_capacity_mut(&mut self) -> &mut [u8] {
&mut self.buf[self.cursor..]
}
pub unsafe fn unchecked_set_len(&mut self, position: usize) {
self.cursor = position;
}
}