1 use core::fmt::Debug;
2 
3 use crate::elf;
4 use crate::endian;
5 use crate::pod::Pod;
6 
7 /// A trait for generic access to `CompressionHeader32` and `CompressionHeader64`.
8 #[allow(missing_docs)]
9 pub trait CompressionHeader: Debug + Pod {
10     type Word: Into<u64>;
11     type Endian: endian::Endian;
12 
ch_type(&self, endian: Self::Endian) -> u3213     fn ch_type(&self, endian: Self::Endian) -> u32;
ch_size(&self, endian: Self::Endian) -> Self::Word14     fn ch_size(&self, endian: Self::Endian) -> Self::Word;
ch_addralign(&self, endian: Self::Endian) -> Self::Word15     fn ch_addralign(&self, endian: Self::Endian) -> Self::Word;
16 }
17 
18 impl<Endian: endian::Endian> CompressionHeader for elf::CompressionHeader32<Endian> {
19     type Word = u32;
20     type Endian = Endian;
21 
22     #[inline]
ch_type(&self, endian: Self::Endian) -> u3223     fn ch_type(&self, endian: Self::Endian) -> u32 {
24         self.ch_type.get(endian)
25     }
26 
27     #[inline]
ch_size(&self, endian: Self::Endian) -> Self::Word28     fn ch_size(&self, endian: Self::Endian) -> Self::Word {
29         self.ch_size.get(endian)
30     }
31 
32     #[inline]
ch_addralign(&self, endian: Self::Endian) -> Self::Word33     fn ch_addralign(&self, endian: Self::Endian) -> Self::Word {
34         self.ch_addralign.get(endian)
35     }
36 }
37 
38 impl<Endian: endian::Endian> CompressionHeader for elf::CompressionHeader64<Endian> {
39     type Word = u64;
40     type Endian = Endian;
41 
42     #[inline]
ch_type(&self, endian: Self::Endian) -> u3243     fn ch_type(&self, endian: Self::Endian) -> u32 {
44         self.ch_type.get(endian)
45     }
46 
47     #[inline]
ch_size(&self, endian: Self::Endian) -> Self::Word48     fn ch_size(&self, endian: Self::Endian) -> Self::Word {
49         self.ch_size.get(endian)
50     }
51 
52     #[inline]
ch_addralign(&self, endian: Self::Endian) -> Self::Word53     fn ch_addralign(&self, endian: Self::Endian) -> Self::Word {
54         self.ch_addralign.get(endian)
55     }
56 }
57