Skip to main content

Crate mediagit_compression

Crate mediagit_compression 

Source
Expand description

Intelligent compression for MediaGit

This crate provides compression abstractions and implementations:

  • Smart compression: Automatic per-object-type strategy selection
  • Zstd compression: Fast, good compression ratios (default)
  • Brotli compression: Higher compression, slower (for archival)
  • Auto-detection: Transparently handle compressed vs uncompressed data
  • Compression levels: Configurable speed vs compression trade-offs

§Quick Start

§Basic Compression

use mediagit_compression::{Compressor, CompressionLevel, ZstdCompressor};

fn main() -> anyhow::Result<()> {
    let compressor = ZstdCompressor::new(CompressionLevel::Default);

    let original = b"Hello, World!";
    let compressed = compressor.compress(original)?;
    let decompressed = compressor.decompress(&compressed)?;

    assert_eq!(original, &decompressed[..]);
    println!("Original: {} bytes, Compressed: {} bytes",
        original.len(), compressed.len());

    Ok(())
}

§Smart Type-Aware Compression

use mediagit_compression::{SmartCompressor, TypeAwareCompressor, ObjectType};

fn main() -> anyhow::Result<()> {
    let compressor = SmartCompressor::new();

    // Automatically selects best strategy based on file type
    let text_data = b"Some text content...";
    let compressed = compressor.compress_typed(text_data, ObjectType::Text)?;

    // Already compressed formats stored without recompression (with Store prefix)
    let jpeg_data = vec![0xFF, 0xD8, 0xFF, 0xE0];
    let stored = compressor.compress_typed(&jpeg_data, ObjectType::Jpeg)?;
    assert_eq!(stored[0], 0x00); // Store mode magic byte
    assert_eq!(&stored[1..], &jpeg_data[..]); // No recompression overhead

    Ok(())
}

§Compression Algorithms

§Zstd (Default)

  • Fast compression and decompression
  • Good compression ratios (typical 2-4x for text/structured data)
  • Low memory usage
  • Ideal for frequently accessed data

§Brotli

  • Higher compression ratios (typical 3-8x for text/structured data)
  • Slower compression but faster decompression than gzip
  • Good for archival and infrequently accessed data
  • Higher memory usage during compression

§Per-Object Type Strategies

SmartCompressor automatically selects optimal compression:

  • Already compressed (JPEG, PNG, MP4, ZIP): Store without recompression
  • Uncompressed images (TIFF, BMP, PSD, RAW): Zstd Best compression
  • Text/Code (TXT, JSON, XML, YAML): Brotli Best for maximum text compression
  • Documents (PDF, SVG): Zstd Default for balanced performance
  • Unknown/Binary: Zstd Default as safe fallback

Re-exports§

pub use adaptive::calculate_entropy;
pub use adaptive::AdaptiveCompressor;
pub use adaptive::CompressionStrategy as AdaptiveStrategy;
pub use adaptive::EntropyClass;
pub use adaptive::FileProfile;
pub use adaptive::PatternClass;
pub use adaptive::PerformanceStats;
pub use adaptive::SizeClass;
pub use brotli_compressor::BrotliCompressor;
pub use error::CompressionError;
pub use error::CompressionResult;
pub use metrics::AggregatedStats;
pub use metrics::CompressionMetrics;
pub use metrics::MetricsAggregator;
pub use per_type_compressor::CompressionProfile;
pub use per_type_compressor::PerObjectTypeCompressor;
pub use per_type_compressor::PerTypeStats;
pub use smart_compressor::CompressionStrategy;
pub use smart_compressor::ObjectCategory;
pub use smart_compressor::ObjectType;
pub use smart_compressor::SmartCompressor;
pub use smart_compressor::TypeAwareCompressor;
pub use zlib_compressor::ZlibCompressor;
pub use zstd_compressor::ZstdCompressor;

Modules§

adaptive
Adaptive compression based on file characteristics
brotli_compressor
Brotli compression implementation
delta
Delta encoding implementation using bsdiff
error
Compression error types
metrics
Compression metrics and statistics
per_type_compressor
Per-object-type compression with configurable profiles
smart_compressor
Smart compression with per-object-type strategy selection
zlib_compressor
Zlib compression implementation for Git compatibility
zstd_compressor
Zstd compression implementation

Enums§

CompressionAlgorithm
Compression algorithm identifier
CompressionLevel
Compression level configuration

Traits§

Compressor
Compressor trait for pluggable compression implementations