diff options
Diffstat (limited to 'src/power/sys')
-rw-r--r-- | src/power/sys/linux.rs | 45 | ||||
-rw-r--r-- | src/power/sys/macos.rs | 3 | ||||
-rw-r--r-- | src/power/sys/mod.rs | 24 |
3 files changed, 72 insertions, 0 deletions
diff --git a/src/power/sys/linux.rs b/src/power/sys/linux.rs new file mode 100644 index 0000000..670498a --- /dev/null +++ b/src/power/sys/linux.rs @@ -0,0 +1,45 @@ +use walkdir; + +pub fn power_supplies() -> Vec<super::PowerSupplyInfo> { + let mut power_supplies = vec![]; + for entry in walkdir::WalkDir::new("/sys/class/power_supply/") + .min_depth(1) + .max_depth(1) + .follow_links(true) + { + let entry = entry.unwrap(); + + let name = entry + .path() + .file_name() + .unwrap() + .to_string_lossy() + .into_owned(); + let ty = super::super::slurp(entry.path().join("type")) + .map(|t: String| super::PowerSupplyType::from_str(&t)) + .expect("couldn't find power supply type"); + let energy_full = super::super::slurp(entry.path().join("energy_full")); + let energy_now = super::super::slurp(entry.path().join("energy_now")); + let online = + super::super::slurp(entry.path().join("online")).map(|n: u8| n != 0); + + power_supplies.push(super::PowerSupplyInfo { + name, + ty, + energy_now, + energy_full, + online, + }) + } + power_supplies +} + +impl super::PowerSupplyType { + fn from_str(ty: &str) -> Self { + match ty { + "Mains" => super::PowerSupplyType::AC, + "Battery" => super::PowerSupplyType::Battery, + _ => panic!("unknown power supply type {}", ty), + } + } +} diff --git a/src/power/sys/macos.rs b/src/power/sys/macos.rs new file mode 100644 index 0000000..a0455ac --- /dev/null +++ b/src/power/sys/macos.rs @@ -0,0 +1,3 @@ +pub fn power_supplies() -> Vec<super::PowerSupplyInfo> { + vec![] +} diff --git a/src/power/sys/mod.rs b/src/power/sys/mod.rs new file mode 100644 index 0000000..b6bb469 --- /dev/null +++ b/src/power/sys/mod.rs @@ -0,0 +1,24 @@ +#[cfg(target_os = "linux")] +mod linux; +#[cfg(target_os = "linux")] +pub use self::linux::*; + +#[cfg(target_os = "macos")] +mod macos; +#[cfg(target_os = "macos")] +pub use self::macos::*; + +#[derive(PartialEq, Eq, Debug, Clone)] +pub enum PowerSupplyType { + AC, + Battery, +} + +#[derive(Debug, Clone)] +pub struct PowerSupplyInfo { + pub name: String, + pub ty: PowerSupplyType, + pub energy_now: Option<u64>, + pub energy_full: Option<u64>, + pub online: Option<bool>, +} |