use std::io;
use std::io::{Read, Write};
use util::Result;
pub trait Serializable<T> {
fn read(reader: &mut dyn Read) -> Result<T>
where
Self: Sized;
fn write(&self, writer: &mut dyn Write) -> io::Result<()>;
}
impl Serializable<[u8; 16]> for [u8; 16] {
fn read(reader: &mut dyn Read) -> Result<[u8; 16]> {
let mut d = [0; 16];
reader.read(&mut d)?;
Ok(d)
}
fn write(&self, writer: &mut dyn Write) -> io::Result<()> {
writer.write(self)?;
Ok(())
}
}
impl Serializable<[u8; 32]> for [u8; 32] {
fn read(reader: &mut dyn Read) -> Result<[u8; 32]> {
let mut d = [0; 32];
reader.read(&mut d)?;
Ok(d)
}
fn write(&self, writer: &mut dyn Write) -> io::Result<()> {
writer.write(self)?;
Ok(())
}
}