use super::AsBytes;
pub struct ByteWriter<const EMPTY: bool> {
buffer: Vec<u8>,
index: usize,
}
impl<const EMPTY: bool> ByteWriter<EMPTY> {
pub fn with_capacity(capacity: usize) -> Self {
ByteWriter {
buffer: vec![0u8; capacity],
index: 0,
}
}
pub fn data(&self) -> &[u8] {
&self.buffer[..self.index]
}
pub fn write_value<T: AsBytes>(&mut self, value: T) {
let data = value.as_bytes();
if !EMPTY {
self.buffer[self.index as usize..self.index as usize + data.len()]
.copy_from_slice(value.as_bytes());
}
self.index += data.len();
}
pub fn write_value_bytes<T: AsBytes>(&mut self, value: T, bytes: usize) {
if !EMPTY {
self.buffer[self.index as usize..self.index as usize + bytes]
.copy_from_slice(&value.as_bytes()[..bytes]);
}
self.index += bytes as usize;
}
}