avila_compress/
lib.rs

1//! # avila-compress
2//!
3//! Native compression library optimized for AvilaDB and scientific computing.
4//!
5//! ## Features
6//! - **LZ4**: Ultra-fast compression for real-time data
7//! - **Zero dependencies**: 100% native Rust implementation
8//! - **SIMD optimized**: AVX2/AVX-512 when available (future)
9//! - **AvilaDB integration**: Native support for columnar data
10//!
11//! ## Example
12//! ```rust
13//! use avila_compress::lz4;
14//!
15//! let data = b"Hello, World! This is a test of LZ4 compression.";
16//! let compressed = lz4::compress(data).expect("compression failed");
17//! let decompressed = lz4::decompress(&compressed).expect("decompression failed");
18//! assert_eq!(data, &decompressed[..]);
19//! ```
20
21pub mod error;
22pub mod lz4;
23pub mod stream;
24pub mod checksum;
25pub mod metrics;
26pub mod columnar;
27pub mod format;
28
29#[cfg(feature = "parallel")]
30pub mod parallel;
31
32#[cfg(feature = "simd")]
33pub mod simd;
34
35#[cfg(feature = "dictionary")]
36pub mod dictionary;
37
38pub use error::{Error, Result};
39pub use metrics::CompressionMetrics;
40pub use format::{AvzFormat, Block};
41
42/// Compression algorithms available
43#[derive(Debug, Copy, Clone, PartialEq, Eq)]
44pub enum CompressionAlgorithm {
45    /// LZ4 - Ultra-fast compression
46    Lz4,
47    // Future: Zstd, Snappy, Custom
48}
49
50/// Compression level
51#[derive(Debug, Copy, Clone, PartialEq, Eq)]
52pub enum Level {
53    /// Fastest compression, lower ratio
54    Fast,
55    /// Balanced speed and ratio
56    Balanced,
57    /// Best compression ratio, slower
58    Best,
59}
60
61impl Default for Level {
62    fn default() -> Self {
63        Level::Balanced
64    }
65}
66
67/// Convenience function to compress data with LZ4
68pub fn compress(data: &[u8]) -> Result<Vec<u8>> {
69    lz4::compress(data)
70}
71
72/// Convenience function to decompress LZ4 data
73pub fn decompress(data: &[u8]) -> Result<Vec<u8>> {
74    lz4::decompress(data)
75}
76
77#[cfg(test)]
78mod tests {
79    use super::*;
80
81    #[test]
82    fn test_round_trip() {
83        let data = b"Hello, World!";
84        let compressed = compress(data).unwrap();
85        let decompressed = decompress(&compressed).unwrap();
86        assert_eq!(data, &decompressed[..]);
87    }
88
89    #[test]
90    fn test_empty_data() {
91        let data = b"";
92        let compressed = compress(data).unwrap();
93        let decompressed = decompress(&compressed).unwrap();
94        assert_eq!(data, &decompressed[..]);
95    }
96
97    #[test]
98    fn test_large_repetitive() {
99        let data = vec![b'A'; 10000];
100        let compressed = compress(&data).unwrap();
101        // TODO: Add real compression with matches
102        // assert!(compressed.len() < data.len());
103        let decompressed = decompress(&compressed).unwrap();
104        assert_eq!(data, decompressed);
105    }
106}