pub mod error;
pub mod implementations;
pub use crate::error::Error;
pub use revision_derive::revisioned;
use std::any::TypeId;
use std::io::{Read, Write};
pub mod prelude {
pub use crate::{DeserializeRevisioned, Revisioned, SerializeRevisioned, revisioned};
}
pub trait Revisioned {
fn revision() -> u16;
#[inline]
fn type_id() -> std::any::TypeId
where
Self: 'static,
{
TypeId::of::<Self>()
}
}
pub trait SerializeRevisioned: Revisioned {
fn serialize_revisioned<W: Write>(&self, w: &mut W) -> Result<(), Error>;
}
pub trait DeserializeRevisioned: Revisioned {
fn deserialize_revisioned<R: Read>(r: &mut R) -> Result<Self, Error>
where
Self: Sized;
}
#[inline]
pub fn from_reader<R, T>(rdr: &mut R) -> Result<T, Error>
where
R: Read,
T: DeserializeRevisioned,
{
DeserializeRevisioned::deserialize_revisioned(rdr)
}
#[inline]
pub fn from_slice<T>(mut bytes: &[u8]) -> Result<T, Error>
where
T: DeserializeRevisioned,
{
DeserializeRevisioned::deserialize_revisioned(&mut bytes)
}
#[inline]
pub fn to_writer<W, T>(writer: &mut W, t: &T) -> Result<(), Error>
where
W: Write,
T: SerializeRevisioned,
{
SerializeRevisioned::serialize_revisioned(t, writer)
}
#[inline]
pub fn to_vec<T>(t: &T) -> Result<Vec<u8>, Error>
where
T: SerializeRevisioned,
{
let mut res = Vec::new();
SerializeRevisioned::serialize_revisioned(t, &mut res)?;
Ok(res)
}