use super::put::*;
use crate::serialize::writer::*;
use alloc::{vec, vec::Vec};
#[cfg_attr(docsrs, doc(cfg(feature = "alloc")))]
pub struct BufWriter(Vec<u8>);
impl BufWriter {
#[inline]
pub fn new() -> Self {
Self(vec![])
}
#[inline]
pub fn clear(&mut self) {
self.0.clear();
}
#[inline]
pub fn reserve(&mut self, len: usize) {
self.0.reserve(len);
}
#[inline]
pub fn len(&self) -> usize {
self.0.len()
}
#[inline]
pub fn is_empty(&self) -> bool {
self.0.is_empty()
}
#[inline]
pub fn with_capacity(cap: usize) -> Self {
Self(Vec::with_capacity(cap))
}
}
impl Default for BufWriter {
#[inline]
fn default() -> Self {
Self::new()
}
}
impl From<Vec<u8>> for BufWriter {
#[inline]
fn from(vec: Vec<u8>) -> Self {
Self(vec)
}
}
impl AsRef<[u8]> for BufWriter {
#[inline]
fn as_ref(&self) -> &[u8] {
self.0.as_ref()
}
}
impl AsMut<Vec<u8>> for BufWriter {
#[inline]
fn as_mut(&mut self) -> &mut Vec<u8> {
&mut self.0
}
}
impl From<BufWriter> for Vec<u8> {
#[inline]
fn from(w: BufWriter) -> Self {
w.0
}
}
impl Put for BufWriter {
#[inline]
fn put_byte(&mut self, b: u8) -> WriteResult<()> {
self.0.push(b);
Ok(())
}
#[inline]
fn put_bytes(&mut self, bytes: &[u8]) -> WriteResult<()> {
if bytes.len() > u32::MAX as usize {
return Err(WriteError::InvalidArrayLength);
}
self.0.extend_from_slice(bytes);
Ok(())
}
}