monistode_binutils/
serializable.rs

1#[derive(Debug)]
2pub enum SerializationError {
3    InvalidArchitecture(u8),
4    InvalidSectionType(u8),
5    InvalidSegmentType(u8),
6    InvalidSymbolTableHeader,
7    InvalidData,
8    DataTooShort,
9}
10
11pub trait Serializable: Sized {
12    fn serialize(&self) -> Vec<u8>;
13    fn deserialize(data: &[u8]) -> Result<(usize, Self), SerializationError>;
14}
15
16#[derive(Debug, Clone, Copy, Eq, PartialEq)]
17pub enum Architecture {
18    Stack = 0,
19    Accumulator = 1,
20    Risc = 2,
21}
22
23impl TryFrom<u8> for Architecture {
24    type Error = SerializationError;
25
26    fn try_from(value: u8) -> Result<Self, Self::Error> {
27        match value {
28            0 => Ok(Architecture::Stack),
29            1 => Ok(Architecture::Accumulator),
30            2 => Ok(Architecture::Risc),
31            v => Err(SerializationError::InvalidArchitecture(v)),
32        }
33    }
34}