termux_api/api/
battery_status.rs1use 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}