use std::io::{Read, Write};
#[derive(Debug)]
pub enum SerializeError {
Io(std::io::Error),
}
#[derive(Debug)]
pub enum DeserializeError {
Io(std::io::Error),
InvalidTag(u8),
InvalidTrailer,
}
impl From<std::io::Error> for SerializeError {
fn from(value: std::io::Error) -> Self {
Self::Io(value)
}
}
impl From<std::io::Error> for DeserializeError {
fn from(value: std::io::Error) -> Self {
Self::Io(value)
}
}
pub trait Serializable {
fn serialize<W: Write>(&self, writer: &mut W) -> Result<(), SerializeError>;
}
pub trait Deserializable {
fn deserialize<R: Read>(reader: &mut R) -> Result<Self, DeserializeError>
where
Self: Sized;
}