use crate::config::CONFIG; use crate::types::ThreadsData; use battery::Manager; use battery::State; // TODO: better error handeling // getting battery percentage pub async fn get_battery() -> ThreadsData { let battery_manager = if let Ok(manager) = Manager::new() { manager } else { return ThreadsData::Battery(String::from("Cannot Create Battery Manager!")); }; let mut batteries = if let Ok(batteries) = battery_manager.batteries() { batteries } else { return ThreadsData::Battery(String::from("Cannot Get Battery!")); }; let battery = batteries.next(); let (icon, percentage); if let Some(bat) = battery { let b = bat.unwrap(); percentage = f32::from(b.state_of_charge()) * 100.0; icon = match b.state() { State::Charging => &CONFIG.battery.charging_icon, _ => &CONFIG.battery.icon, }; } else { return ThreadsData::Battery(String::from("Cannot Read Battery!")); }; let result = format!( " {} {:.0}% {}", icon, percentage, CONFIG.seperator ); ThreadsData::Battery(result) }