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    Risc = 2,
20}
21
22impl TryFrom<u8> for Architecture {
23    type Error = SerializationError;
24
25    fn try_from(value: u8) -> Result<Self, Self::Error> {
26        match value {
27            0 => Ok(Architecture::Stack),
28            2 => Ok(Architecture::Risc),
29            v => Err(SerializationError::InvalidArchitecture(v)),
30        }
31    }
32}