agzip 0.1.0

Async compatible gzip (de)compressor
Documentation
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()
    }
}