monistode_binutils/
serializable.rs1#[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}