use core::fmt::Debug; use crate::elf; use crate::endian; use crate::pod::Pod; /// A trait for generic access to `CompressionHeader32` and `CompressionHeader64`. #[allow(missing_docs)] pub trait CompressionHeader: Debug + Pod { type Word: Into<u64>; type Endian: endian::Endian; fn ch_type(&self, endian: Self::Endian) -> u32; fn ch_size(&self, endian: Self::Endian) -> Self::Word; fn ch_addralign(&self, endian: Self::Endian) -> Self::Word; } impl<Endian: endian::Endian> CompressionHeader for elf::CompressionHeader32<Endian> { type Word = u32; type Endian = Endian; #[inline] fn ch_type(&self, endian: Self::Endian) -> u32 { self.ch_type.get(endian) } #[inline] fn ch_size(&self, endian: Self::Endian) -> Self::Word { self.ch_size.get(endian) } #[inline] fn ch_addralign(&self, endian: Self::Endian) -> Self::Word { self.ch_addralign.get(endian) } } impl<Endian: endian::Endian> CompressionHeader for elf::CompressionHeader64<Endian> { type Word = u64; type Endian = Endian; #[inline] fn ch_type(&self, endian: Self::Endian) -> u32 { self.ch_type.get(endian) } #[inline] fn ch_size(&self, endian: Self::Endian) -> Self::Word { self.ch_size.get(endian) } #[inline] fn ch_addralign(&self, endian: Self::Endian) -> Self::Word { self.ch_addralign.get(endian) } }