use crate::bytestream::reader::{ZByteIoError, ZSeekFrom};
pub trait ZByteReaderTrait {
fn read_byte_no_error(&mut self) -> u8;
fn read_exact_bytes(&mut self, buf: &mut [u8]) -> Result<(), ZByteIoError>;
fn read_const_bytes<const N: usize>(&mut self, buf: &mut [u8; N]) -> Result<(), ZByteIoError>;
fn read_const_bytes_no_error<const N: usize>(&mut self, buf: &mut [u8; N]);
fn read_bytes(&mut self, buf: &mut [u8]) -> Result<usize, ZByteIoError>;
fn peek_bytes(&mut self, buf: &mut [u8]) -> Result<usize, ZByteIoError>;
fn peek_exact_bytes(&mut self, buf: &mut [u8]) -> Result<(), ZByteIoError>;
fn z_seek(&mut self, from: ZSeekFrom) -> Result<u64, ZByteIoError>;
fn is_eof(&mut self) -> Result<bool, ZByteIoError>;
fn z_position(&mut self) -> Result<u64, ZByteIoError>;
fn read_remaining(&mut self, sink: &mut alloc::vec::Vec<u8>) -> Result<usize, ZByteIoError>;
}
pub trait ZByteWriterTrait {
fn write_bytes(&mut self, buf: &[u8]) -> Result<usize, ZByteIoError>;
fn write_all_bytes(&mut self, buf: &[u8]) -> Result<(), ZByteIoError>;
fn write_const_bytes<const N: usize>(&mut self, buf: &[u8; N]) -> Result<(), ZByteIoError>;
fn flush_bytes(&mut self) -> Result<(), ZByteIoError>;
fn reserve_capacity(&mut self, size: usize) -> Result<(), ZByteIoError>;
}