rpgcpf 0.1.0

GCPF archive compression and decompression library
Documentation
//! Gzip [`Compressor`] impl

use std::io::Write;

use flate2::{Compression, write::GzEncoder};

use super::{Compressor, error::Error};

/// Gzip [`Compressor`] impl
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
pub struct GzipCompressor {
    /// Compression level
    pub level: Compression,
}

impl GzipCompressor {
    /// Create a [`GzipCompressor`] instnce
    #[cfg_attr(test, coverage(off))]
    #[must_use]
    pub fn new(level: Compression) -> Self {
        Self { level }
    }
}

impl Compressor for GzipCompressor {
    fn compress(&self, data: &[u8]) -> Result<Vec<u8>, Error> {
        let mut compressor = GzEncoder::new(Vec::new(), self.level);
        compressor.write_all(data)?;
        Ok(compressor.finish()?)
    }
}