pub trait Reader {
// Required methods
fn read_u8(&mut self) -> Result<Option<u8>>;
fn read_u16(&mut self) -> Result<Option<u16>>;
fn read_u32(&mut self) -> Result<Option<u32>>;
fn read_u64(&mut self) -> Result<Option<u64>>;
fn read_bytes(&mut self, buf: &mut [u8]) -> Result<usize>;
fn read_string(&mut self) -> Result<Option<String>>;
}