termux_api/api/
battery_status.rs

1use super::errors::TermuxError;
2use serde::Deserialize;
3
4use std::process::Command;
5#[derive(Debug, Deserialize)]
6pub enum HealthStatus {
7    #[serde(rename = "UNKNOWN")]
8    Unknown,
9    #[serde(rename = "GOOD")]
10    Good,
11    #[serde(rename = "OVERHEAT")]
12    Overheat,
13    #[serde(rename = "DEAD")]
14    Dead,
15    #[serde(rename = "OVER_VOLTAGE")]
16    OverVoltage,
17    #[serde(rename = "UNSPECIFIED_FAILURE")]
18    UnspecifiedFailure,
19    #[serde(rename = "COLD")]
20    Cold,
21}
22
23#[derive(Debug, Deserialize)]
24pub enum PluggedStatus {
25    #[serde(rename = "UNPLUGGED")]
26    Unplugged,
27    #[serde(rename = "AC")]
28    Ac,
29    #[serde(rename = "USB")]
30    Usb,
31    #[serde(rename = "WIRELESS")]
32    Wireless,
33}
34
35#[derive(Debug, Deserialize)]
36pub enum Status {
37    #[serde(rename = "CHARGING")]
38    Charging,
39    #[serde(rename = "DISCHARGING")]
40    Discharging,
41    #[serde(rename = "FULL")]
42    Full,
43    #[serde(rename = "NOT_CHARGING")]
44    NotCharging,
45}
46
47#[derive(Debug, Deserialize)]
48pub struct BatteryStatus {
49    pub health: HealthStatus,
50    pub percentage: u8,
51    pub plugged: PluggedStatus,
52    pub status: Status,
53    pub temperature: f32,
54    pub current: i32,
55}
56
57pub struct TermuxBatteryStatus {}
58impl TermuxBatteryStatus {
59    pub fn new() -> Self {
60        TermuxBatteryStatus {}
61    }
62    pub fn run(&self) -> Result<BatteryStatus, TermuxError> {
63        let mut command = Command::new("termux-battery-status");
64        let output = command.output();
65        match output {
66            Ok(output) => {
67                if output.status.success() {
68                    let battery_status: BatteryStatus =
69                        serde_json::from_slice(&output.stdout).unwrap();
70
71                    return Ok(battery_status);
72                }
73                Err(TermuxError::Output(output.to_owned()))
74            }
75            Err(e) => Err(TermuxError::IOError(e)),
76        }
77    }
78}