monistode_binutils/object_file/
header.rs

1use crate::serializable::*;
2
3#[derive(Debug, Clone)]
4pub struct ObjectHeader {
5    pub(crate) architecture: Architecture,
6    pub(crate) section_count: u64,
7}
8
9impl Serializable for ObjectHeader {
10    fn serialize(&self) -> Vec<u8> {
11        let mut data = Vec::new();
12        data.push(self.architecture as u8);
13        data.extend(self.section_count.to_le_bytes());
14        data
15    }
16
17    fn deserialize(data: &[u8]) -> Result<(usize, Self), SerializationError> {
18        if data.len() < 9 {
19            return Err(SerializationError::DataTooShort);
20        }
21
22        let architecture = Architecture::try_from(data[0])?;
23        let section_count = u64::from_le_bytes([
24            data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8],
25        ]);
26
27        Ok((
28            9,
29            ObjectHeader {
30                architecture,
31                section_count,
32            },
33        ))
34    }
35}
36
37impl ObjectHeader {
38    pub fn new(architecture: Architecture, section_count: u64) -> Self {
39        ObjectHeader {
40            architecture,
41            section_count,
42        }
43    }
44}
45