openserve 2.0.3

A modern, high-performance, AI-enhanced file server built in Rust
Documentation
//! Compression utilities for file handling.

use anyhow::Result;
use flate2::Compression;
use flate2::write::{GzEncoder, DeflateEncoder};
use flate2::read::{GzDecoder, DeflateDecoder};
use std::io::{Read, Write};

/// Compresses data using gzip compression.
///
/// This function takes a byte slice and compresses it using the gzip
/// algorithm with default compression level.
///
/// # Arguments
///
/// * `data` - The byte slice to compress.
///
/// # Returns
///
/// A `Result` containing the compressed data as a `Vec<u8>`, or an error
/// if compression fails.
pub fn compress_gzip(data: &[u8]) -> Result<Vec<u8>> {
    let mut encoder = GzEncoder::new(Vec::new(), Compression::default());
    encoder.write_all(data)?;
    Ok(encoder.finish()?)
}

/// Decompresses gzip-compressed data.
///
/// This function takes gzip-compressed data and decompresses it back
/// to its original form.
///
/// # Arguments
///
/// * `data` - The gzip-compressed byte slice to decompress.
///
/// # Returns
///
/// A `Result` containing the decompressed data as a `Vec<u8>`, or an error
/// if decompression fails.
pub fn decompress_gzip(data: &[u8]) -> Result<Vec<u8>> {
    let mut decoder = GzDecoder::new(data);
    let mut result = Vec::new();
    decoder.read_to_end(&mut result)?;
    Ok(result)
}

/// Compresses data using deflate compression.
///
/// This function takes a byte slice and compresses it using the deflate
/// algorithm with default compression level.
///
/// # Arguments
///
/// * `data` - The byte slice to compress.
///
/// # Returns
///
/// A `Result` containing the compressed data as a `Vec<u8>`, or an error
/// if compression fails.
pub fn compress_deflate(data: &[u8]) -> Result<Vec<u8>> {
    let mut encoder = DeflateEncoder::new(Vec::new(), Compression::default());
    encoder.write_all(data)?;
    Ok(encoder.finish()?)
}

/// Decompresses deflate-compressed data.
///
/// This function takes deflate-compressed data and decompresses it back
/// to its original form.
///
/// # Arguments
///
/// * `data` - The deflate-compressed byte slice to decompress.
///
/// # Returns
///
/// A `Result` containing the decompressed data as a `Vec<u8>`, or an error
/// if decompression fails.
pub fn decompress_deflate(data: &[u8]) -> Result<Vec<u8>> {
    let mut decoder = DeflateDecoder::new(data);
    let mut result = Vec::new();
    decoder.read_to_end(&mut result)?;
    Ok(result)
}