use std::io;
use std::io::Write;
pub trait DataOutput: Write {
fn write_byte(&mut self, b: u8) -> io::Result<()>;
fn write_le_int(&mut self, i: i32) -> io::Result<()> {
self.write_all(&i.to_le_bytes())
}
fn write_le_short(&mut self, i: i16) -> io::Result<()> {
self.write_all(&i.to_le_bytes())
}
fn write_le_long(&mut self, i: i64) -> io::Result<()> {
self.write_all(&i.to_le_bytes())
}
fn write_be_int(&mut self, i: i32) -> io::Result<()> {
self.write_all(&i.to_be_bytes())
}
fn write_be_long(&mut self, i: i64) -> io::Result<()> {
self.write_all(&i.to_be_bytes())
}
}
pub struct VecOutput<'a>(pub &'a mut Vec<u8>);
impl Write for VecOutput<'_> {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
self.0.extend_from_slice(buf);
Ok(buf.len())
}
fn flush(&mut self) -> io::Result<()> {
Ok(())
}
}
impl DataOutput for VecOutput<'_> {
fn write_byte(&mut self, b: u8) -> io::Result<()> {
self.0.push(b);
Ok(())
}
}