crush_core/plugin/mod.rs
1//! Plugin system for Crush compression library
2//!
3//! This module provides the plugin infrastructure for extending Crush with
4//! custom compression algorithms. Plugins are registered at compile-time using
5//! the `linkme` crate for zero runtime overhead.
6
7pub mod contract;
8pub mod default;
9pub mod metadata;
10pub mod registry;
11pub mod selector;
12pub mod timeout;
13
14pub use contract::CompressionAlgorithm;
15pub use metadata::{CrushHeader, FileMetadata, PluginMetadata};
16pub use registry::{init_plugins, list_plugins};
17pub use selector::{calculate_plugin_score, PluginSelector, ScoringWeights};
18pub use timeout::{run_with_timeout, run_with_timeout_and_cancel, TimeoutGuard};
19
20use linkme::distributed_slice;
21
22/// Global registry of all compile-time registered compression plugins
23///
24/// Plugins register themselves by adding to this distributed slice using:
25/// ```
26/// use crush_core::plugin::{CompressionAlgorithm, COMPRESSION_ALGORITHMS};
27/// use linkme::distributed_slice;
28///
29/// // Plugin registration example (requires implementing CompressionAlgorithm)
30/// // #[distributed_slice(COMPRESSION_ALGORITHMS)]
31/// // static MY_PLUGIN: &dyn CompressionAlgorithm = &MyPluginImpl;
32/// ```
33#[distributed_slice]
34pub static COMPRESSION_ALGORITHMS: [&'static dyn CompressionAlgorithm] = [..];