diff --git a/Cargo.toml b/Cargo.toml index 0435f54..50be1e6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,8 +7,8 @@ edition = "2024" chrono = { version = "0.4.44", features = ["serde"] } clap = { version = "4.6.0", features = ["derive"] } colored = "3.1.1" -cpal = {version = "0.17.3", default-features = false} -display-info = "0.5.9" +cpal = { version = "0.17.3", optional = true } +display-info = { version = "0.5.9", optional = true } mac_address = "1.1.8" num_cpus = "1.17.0" reqwest = { version = "0.13.2", features = ["blocking", "json"] } @@ -16,3 +16,8 @@ serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.149" sysinfo = "0.38.4" uuid = { version = "1.22.0", features = ["v4"] } + +[features] +default = [] +audio = ["dep:cpal"] +monitors = ["dep:display-info"] diff --git a/src/slimes.rs b/src/slimes.rs index ae85d4c..31a16f5 100644 --- a/src/slimes.rs +++ b/src/slimes.rs @@ -42,7 +42,7 @@ pub trait Slime { } pub fn get_all_slimes() -> Vec> { - vec![ + let mut slimes: Vec> = vec![ Box::new(OsSlime), Box::new(KernelSlime), Box::new(HostnameSlime), @@ -50,10 +50,16 @@ pub fn get_all_slimes() -> Vec> { Box::new(CpuSlime), Box::new(GpuSlime), Box::new(RamSlime), - Box::new(MonitorSlime), Box::new(NetworkSlime), - Box::new(AudioSlime), - ] + ]; + + #[cfg(feature = "monitors")] + slimes.push(Box::new(MonitorSlime)); + + #[cfg(feature = "audio")] + slimes.push(Box::new(AudioSlime)); + + slimes } /// OS name @@ -282,7 +288,9 @@ impl Slime for GpuSlime { } /// Monitors +#[cfg(feature = "monitors")] pub struct MonitorSlime; +#[cfg(feature = "monitors")] impl Slime for MonitorSlime { fn label(&self) -> &str { "Monitors" @@ -396,7 +404,9 @@ impl Slime for NetworkSlime { } /// Audio hardware +#[cfg(feature = "audio")] pub struct AudioSlime; +#[cfg(feature = "audio")] impl Slime for AudioSlime { fn label(&self) -> &str { "Audio"