foodshare_compression/
lib.rs

1//! Response compression utilities for FoodShare.
2//!
3//! This crate provides:
4//! - Brotli compression (not available in Deno!)
5//! - Gzip/Deflate compression
6//! - ETag generation
7
8mod brotli_impl;
9mod gzip;
10mod etag;
11mod error;
12
13#[cfg(feature = "wasm")]
14mod wasm;
15
16pub use brotli_impl::{brotli_compress, brotli_decompress};
17pub use gzip::{gzip_compress, gzip_decompress, deflate_compress, deflate_decompress};
18pub use etag::generate_etag;
19pub use error::{CompressionError, Result};
20
21/// Compression algorithm.
22#[derive(Debug, Clone, Copy, PartialEq, Eq)]
23pub enum Algorithm {
24    /// Brotli compression (best ratio)
25    Brotli,
26    /// Gzip compression (widely supported)
27    Gzip,
28    /// Deflate compression
29    Deflate,
30}
31
32/// Compress data using the specified algorithm.
33pub fn compress(data: &[u8], algorithm: Algorithm, level: u32) -> Result<Vec<u8>> {
34    match algorithm {
35        Algorithm::Brotli => brotli_compress(data, level),
36        Algorithm::Gzip => gzip_compress(data, level),
37        Algorithm::Deflate => deflate_compress(data, level),
38    }
39}
40
41/// Decompress data using the specified algorithm.
42pub fn decompress(data: &[u8], algorithm: Algorithm) -> Result<Vec<u8>> {
43    match algorithm {
44        Algorithm::Brotli => brotli_decompress(data),
45        Algorithm::Gzip => gzip_decompress(data),
46        Algorithm::Deflate => deflate_decompress(data),
47    }
48}