mod counter;
#[cfg(feature = "io")]
mod io;
mod slice;
pub use counter::CounterUnpacker;
#[cfg(feature = "io")]
pub use io::IoUnpacker;
pub use slice::SliceUnpacker;
pub trait Unpacker: Sized {
type Error;
fn unpack_bytes<B: AsMut<[u8]>>(&mut self, bytes: B) -> Result<(), Self::Error>;
#[inline]
fn ensure_bytes(&self, _len: usize) -> Result<(), Self::Error> {
Ok(())
}
#[inline]
fn read_bytes(&self) -> Option<usize> {
None
}
}
impl<U: Unpacker + ?Sized> Unpacker for &mut U {
type Error = U::Error;
#[inline]
fn unpack_bytes<B: AsMut<[u8]>>(&mut self, bytes: B) -> Result<(), Self::Error> {
U::unpack_bytes(*self, bytes)
}
#[inline]
fn ensure_bytes(&self, len: usize) -> Result<(), Self::Error> {
U::ensure_bytes(*self, len)
}
#[inline]
fn read_bytes(&self) -> Option<usize> {
U::read_bytes(*self)
}
}