1pub 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#[derive(Debug, Copy, Clone, PartialEq, Eq)]
44pub enum CompressionAlgorithm {
45 Lz4,
47 }
49
50#[derive(Debug, Copy, Clone, PartialEq, Eq)]
52pub enum Level {
53 Fast,
55 Balanced,
57 Best,
59}
60
61impl Default for Level {
62 fn default() -> Self {
63 Level::Balanced
64 }
65}
66
67pub fn compress(data: &[u8]) -> Result<Vec<u8>> {
69 lz4::compress(data)
70}
71
72pub 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 let decompressed = decompress(&compressed).unwrap();
104 assert_eq!(data, decompressed);
105 }
106}