termux-api 0.1.0

A Rust wrapper around Termux API.
Documentation
use super::errors::TermuxError;
use serde::Deserialize;

use std::process::Command;
#[derive(Debug, Deserialize)]
pub enum HealthStatus {
    #[serde(rename = "UNKNOWN")]
    Unknown,
    #[serde(rename = "GOOD")]
    Good,
    #[serde(rename = "OVERHEAT")]
    Overheat,
    #[serde(rename = "DEAD")]
    Dead,
    #[serde(rename = "OVER_VOLTAGE")]
    OverVoltage,
    #[serde(rename = "UNSPECIFIED_FAILURE")]
    UnspecifiedFailure,
    #[serde(rename = "COLD")]
    Cold,
}

#[derive(Debug, Deserialize)]
pub enum PluggedStatus {
    #[serde(rename = "UNPLUGGED")]
    Unplugged,
    #[serde(rename = "AC")]
    Ac,
    #[serde(rename = "USB")]
    Usb,
    #[serde(rename = "WIRELESS")]
    Wireless,
}

#[derive(Debug, Deserialize)]
pub enum Status {
    #[serde(rename = "CHARGING")]
    Charging,
    #[serde(rename = "DISCHARGING")]
    Discharging,
    #[serde(rename = "FULL")]
    Full,
    #[serde(rename = "NOT_CHARGING")]
    NotCharging,
}

#[derive(Debug, Deserialize)]
pub struct BatteryStatus {
    pub health: HealthStatus,
    pub percentage: u8,
    pub plugged: PluggedStatus,
    pub status: Status,
    pub temperature: f32,
    pub current: i32,
}

pub struct TermuxBatteryStatus {}
impl TermuxBatteryStatus {
    pub fn new() -> Self {
        TermuxBatteryStatus {}
    }
    pub fn run(&self) -> Result<BatteryStatus, TermuxError> {
        let mut command = Command::new("termux-battery-status");
        let output = command.output();
        match output {
            Ok(output) => {
                if output.status.success() {
                    let battery_status: BatteryStatus =
                        serde_json::from_slice(&output.stdout).unwrap();

                    return Ok(battery_status);
                }
                Err(TermuxError::Output(output.to_owned()))
            }
            Err(e) => Err(TermuxError::IOError(e)),
        }
    }
}