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