aboutsummaryrefslogtreecommitdiff
path: root/src/field/mod.rs
blob: 82e8abd5273013516e812dcc28f531ff1681c473 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use std::io::Result;
mod data;

pub use data::Data;

pub trait Field: Sized {
    const ID: u16;

    fn size(&self) -> [u8; 2];
    fn serialize_data(&self) -> &Vec<u8>;
    fn deserialize(data: &[u8]) -> Result<Self>;
    fn serialize(&self) -> Vec<u8> {
        let mut result = Vec::new();

        result.extend_from_slice(&Self::ID.to_be_bytes());
        result.extend_from_slice(&self.size());
        result.extend_from_slice(self.serialize_data());

        result
    }
}