Skip to main content

crush_core/
lib.rs

1//! Crush Core Library
2//!
3//! High-performance parallel compression library with pluggable compression algorithms.
4//!
5//! # Overview
6//!
7//! Crush provides a flexible plugin-based compression system with:
8//! - **Pluggable algorithms**: Add custom compression algorithms via the [`CompressionAlgorithm`] trait
9//! - **Intelligent selection**: Automatic plugin selection based on scoring weights
10//! - **Timeout protection**: Configurable timeouts prevent runaway compression operations
11//! - **Zero-copy design**: Minimal allocations and efficient memory usage
12//!
13//! # Quick Start
14//!
15//! ```
16//! use crush_core::{init_plugins, compress, decompress};
17//!
18//! // Initialize plugin registry (call once at startup)
19//! init_plugins().expect("Plugin initialization failed");
20//!
21//! // Compress data
22//! let data = b"Hello, Crush!";
23//! let compressed = compress(data).expect("Compression failed");
24//!
25//! // Decompress data
26//! let decompressed = decompress(&compressed).expect("Decompression failed");
27//! assert_eq!(data.as_slice(), decompressed.data.as_slice());
28//! ```
29//!
30//! # Advanced Usage
31//!
32//! ## Custom Plugin Selection
33//!
34//! ```
35//! use crush_core::{init_plugins, compress_with_options, CompressionOptions, ScoringWeights};
36//! use std::time::Duration;
37//!
38//! init_plugins().expect("Plugin initialization failed");
39//!
40//! // Manual plugin override
41//! let options = CompressionOptions::default()
42//!     .with_plugin("deflate")
43//!     .with_timeout(Duration::from_secs(10));
44//! let compressed = compress_with_options(b"data", &options).expect("Compression failed");
45//!
46//! // Automatic selection with custom weights
47//! let weights = ScoringWeights {
48//!     throughput: 0.8,        // Prioritize speed
49//!     compression_ratio: 0.2, // Less emphasis on compression ratio
50//! };
51//! let options = CompressionOptions::default().with_weights(weights);
52//! let compressed = compress_with_options(b"data", &options).expect("Compression failed");
53//! ```
54//!
55//! ## Plugin Discovery
56//!
57//! ```
58//! use crush_core::{init_plugins, list_plugins};
59//!
60//! init_plugins().expect("Plugin initialization failed");
61//!
62//! // List all registered plugins
63//! for plugin in list_plugins() {
64//!     println!("Plugin: {} ({})", plugin.name, plugin.version);
65//!     println!("  Throughput: {} MB/s", plugin.throughput);
66//!     println!("  Compression ratio: {:.2}", plugin.compression_ratio);
67//! }
68//! ```
69
70pub mod cancel;
71pub mod compression;
72pub mod decompression;
73pub mod error;
74pub mod inspection;
75pub mod plugin;
76
77pub use cancel::{AtomicCancellationToken, CancellationToken, ResourceTracker};
78pub use compression::{compress, compress_with_options, CompressionOptions};
79pub use decompression::{decompress, decompress_with_cancel};
80pub use error::{CrushError, PluginError, Result, TimeoutError, ValidationError};
81pub use inspection::{inspect, InspectResult};
82pub use plugin::{
83    calculate_plugin_score, init_plugins, list_plugins, CompressionAlgorithm, CrushHeader,
84    PluginMetadata, PluginSelector, ScoringWeights, COMPRESSION_ALGORITHMS,
85};