aboutsummaryrefslogtreecommitdiff
path: root/src/utils/battery.rs
blob: 432e22a217d78754659e8e4e08b9738a54f05883 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use crate::config::CONFIG;
use crate::types::ThreadsData;
use battery::Manager;

// 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 percentage = if let Some(battery) = batteries.next() {
        f32::from(battery.unwrap().state_of_charge()) * 100.0
    } else {
        return ThreadsData::Battery(String::from("Cannot Read Battery!"));
    };

    let result = format!(
        "  {}  {:.0}%  {}",
        CONFIG.battery.icon, percentage, CONFIG.seperator
    );
    ThreadsData::Battery(result)
}