pub trait Writer {
// Required methods
fn write_u8(&mut self, v: u8) -> Result<()>;
fn write_u16(&mut self, v: u16) -> Result<()>;
fn write_u32(&mut self, v: u32) -> Result<()>;
fn write_u64(&mut self, v: u64) -> Result<()>;
fn write_bytes(&mut self, v: &[u8]) -> Result<()>;
fn write_str(&mut self, v: &str) -> Result<()>;
fn write_string(&mut self, v: &String) -> Result<()>;
}