use flate2::Crc;
#[derive(Clone, Copy, Debug)]
pub(crate) struct Flags(pub u8);
impl Flags {
pub const CRC: u8 = 1 << 1;
pub const EXTRA: u8 = 1 << 2;
pub const NAME: u8 = 1 << 3;
pub const COMMENT: u8 = 1 << 4;
pub fn has(self, bit: u8) -> bool {
(self.0 & bit) != 0
}
pub fn set(&mut self, bit: u8) {
self.0 |= bit;
}
}
#[derive(Debug)]
pub(crate) struct Footer {
pub crc: u32,
pub isize: u32,
}
impl Footer {
#[inline]
pub fn empty() -> Self {
Self { crc: 0, isize: 0 }
}
pub fn from_crc(crc: &Crc) -> Self {
Self {
crc: crc.sum(),
isize: crc.amount(),
}
}
pub fn checksum(&self, crc: &Crc) -> bool {
self.crc == crc.sum() && self.isize == crc.amount()
}
}