1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//! Serialization and deserialization

pub use de::Deserializer;
pub use ser::Serializer;

mod de;
mod ser;

// TODO: Implement Display
#[derive(Debug, PartialEq)]
pub enum Error {
    ErrBufferSmall,
    Other,
}

pub trait Serializable
where
    Self: Sized,
{
    fn serialize(&self, ser: &mut Serializer) -> Result<usize, Error>;
}

pub trait Deserializable
where
    Self: Sized,
{
    fn deserialize(de: &mut Deserializer) -> Result<Self, Error>;
}

pub fn serialize<T>(value: &T, out: &mut [u8]) -> Result<usize, Error>
where
    T: Serializable,
{
    let mut se = Serializer::new(out);
    value.serialize(&mut se)
}

pub fn deserialize<T>(out: &[u8]) -> Result<T, Error>
where
    T: Deserializable,
{
    let mut de = Deserializer::new(out);
    T::deserialize(&mut de)
}