use crate::Error;
pub trait Write {
fn write(&mut self, buf: &[u8]) -> Result<Option<u32>, Error> {
if self.write_all(buf)?.is_none() {
return Ok(None);
}
u32::try_from(buf.len())
.map(Some)
.map_err(|_| Error::OutOfMemory)
}
fn write_all(&mut self, buf: &[u8]) -> Result<Option<()>, Error>;
fn write_byte(&mut self, value: u8) -> Result<Option<()>, Error> {
self.write_all(&[value])
}
}
pub trait Read {
fn read(&mut self, buf: &mut [u8]) -> Result<Option<u32>, Error>;
fn read_byte(&mut self) -> Result<Option<u8>, Error>;
}
pub trait Seek {
fn seek(&mut self, offset: u32) -> Result<Option<u32>, Error>;
}