monistode_binutils/object_file/
header.rs1use 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