#[cfg(feature = "alloc")]
use alloc::vec::Vec;
#[cfg(feature = "alloc")]
#[derive(Debug, Default, Clone)]
pub struct Writer {
buf: Vec<u8>,
}
#[cfg(feature = "alloc")]
impl Writer {
pub fn new() -> Self {
Self { buf: Vec::new() }
}
pub fn with_capacity(cap: usize) -> Self {
Self {
buf: Vec::with_capacity(cap),
}
}
pub fn write_raw(&mut self, b: &[u8]) {
self.buf.extend_from_slice(b);
}
pub fn write_u8(&mut self, v: u8) {
self.buf.push(v);
}
pub fn write_bool(&mut self, v: bool) {
self.buf.push(v as u8);
}
pub fn write_u32(&mut self, v: u32) {
self.buf.extend_from_slice(&v.to_be_bytes());
}
pub fn write_u64(&mut self, v: u64) {
self.buf.extend_from_slice(&v.to_be_bytes());
}
pub fn write_string(&mut self, s: &[u8]) {
self.write_u32(s.len() as u32);
self.buf.extend_from_slice(s);
}
pub fn into_vec(self) -> Vec<u8> {
self.buf
}
pub fn as_slice(&self) -> &[u8] {
&self.buf
}
pub fn len(&self) -> usize {
self.buf.len()
}
pub fn is_empty(&self) -> bool {
self.buf.is_empty()
}
}