#![allow(unused_variables)]
#[derive(Debug, Clone)]
pub enum ReadoutError {
MetricNotAvailable,
NotImplemented,
Other(String),
Warning(String),
}
impl ToString for ReadoutError {
fn to_string(&self) -> String {
match self {
ReadoutError::MetricNotAvailable => {
String::from("Metric is not available on this system.")
}
ReadoutError::NotImplemented => {
String::from("This metric is not available on this platform or is not yet implemented by libmacchina.")
}
ReadoutError::Other(s) => s.clone(),
ReadoutError::Warning(s) => s.clone(),
}
}
}
impl From<&ReadoutError> for ReadoutError {
fn from(r: &ReadoutError) -> Self {
r.to_owned()
}
}
pub trait BatteryReadout {
fn new() -> Self;
fn percentage(&self) -> Result<u8, ReadoutError>;
fn status(&self) -> Result<BatteryState, ReadoutError>;
fn health(&self) -> Result<u8, ReadoutError>;
}
pub trait KernelReadout {
fn new() -> Self;
fn os_release(&self) -> Result<String, ReadoutError>;
fn os_type(&self) -> Result<String, ReadoutError>;
fn pretty_kernel(&self) -> Result<String, ReadoutError> {
let os_type = self.os_type().unwrap_or_default();
let os_release = self.os_release().unwrap_or_default();
if !(os_type.is_empty() || os_release.is_empty()) {
return Ok(format!("{os_type} {os_release}"));
}
Err(ReadoutError::MetricNotAvailable)
}
}
pub trait MemoryReadout {
fn new() -> Self;
fn total(&self) -> Result<u64, ReadoutError>;
fn free(&self) -> Result<u64, ReadoutError>;
fn buffers(&self) -> Result<u64, ReadoutError>;
fn cached(&self) -> Result<u64, ReadoutError>;
fn reclaimable(&self) -> Result<u64, ReadoutError>;
fn used(&self) -> Result<u64, ReadoutError>;
}
pub trait PackageReadout {
fn new() -> Self;
fn count_pkgs(&self) -> Vec<(PackageManager, usize)> {
Vec::new()
}
}
pub trait NetworkReadout {
fn new() -> Self;
fn tx_bytes(&self, interface: Option<&str>) -> Result<usize, ReadoutError>;
fn tx_packets(&self, interface: Option<&str>) -> Result<usize, ReadoutError>;
fn rx_bytes(&self, interface: Option<&str>) -> Result<usize, ReadoutError>;
fn rx_packets(&self, interface: Option<&str>) -> Result<usize, ReadoutError>;
fn logical_address(&self, interface: Option<&str>) -> Result<String, ReadoutError>;
fn physical_address(&self, interface: Option<&str>) -> Result<String, ReadoutError>;
}
pub trait ProductReadout {
fn new() -> Self;
fn vendor(&self) -> Result<String, ReadoutError>;
fn family(&self) -> Result<String, ReadoutError>;
fn product(&self) -> Result<String, ReadoutError>;
}
pub trait GeneralReadout {
fn new() -> Self;
fn backlight(&self) -> Result<usize, ReadoutError>;
fn resolution(&self) -> Result<String, ReadoutError>;
fn username(&self) -> Result<String, ReadoutError>;
fn hostname(&self) -> Result<String, ReadoutError>;
fn distribution(&self) -> Result<String, ReadoutError>;
fn desktop_environment(&self) -> Result<String, ReadoutError>;
fn session(&self) -> Result<String, ReadoutError>;
fn window_manager(&self) -> Result<String, ReadoutError>;
fn terminal(&self) -> Result<String, ReadoutError>;
fn shell(&self, _shorthand: ShellFormat, kind: ShellKind) -> Result<String, ReadoutError>;
fn cpu_model_name(&self) -> Result<String, ReadoutError>;
fn cpu_usage(&self) -> Result<usize, ReadoutError>;
fn cpu_physical_cores(&self) -> Result<usize, ReadoutError>;
fn cpu_cores(&self) -> Result<usize, ReadoutError>;
fn uptime(&self) -> Result<usize, ReadoutError>;
fn machine(&self) -> Result<String, ReadoutError>;
fn os_name(&self) -> Result<String, ReadoutError>;
fn disk_space(&self) -> Result<(u64, u64), ReadoutError>;
fn gpus(&self) -> Result<Vec<String>, ReadoutError>;
}
pub enum BatteryState {
Charging,
Discharging,
}
impl std::fmt::Display for BatteryState {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match *self {
BatteryState::Charging => {
write!(f, "Charging")
}
BatteryState::Discharging => {
write!(f, "Discharging")
}
}
}
}
impl From<BatteryState> for &'static str {
fn from(state: BatteryState) -> &'static str {
match state {
BatteryState::Charging => "Charging",
BatteryState::Discharging => "Discharging",
}
}
}
#[derive(Debug)]
pub enum ShellFormat {
Relative,
Absolute,
}
#[derive(Debug)]
pub enum ShellKind {
Current,
Default,
}
pub enum PackageManager {
Homebrew,
MacPorts,
Pacman,
Portage,
Dpkg,
Opkg,
Xbps,
Pkgsrc,
Apk,
Eopkg,
Rpm,
Cargo,
Flatpak,
Snap,
Android,
Pkg,
Scoop,
}
impl ToString for PackageManager {
fn to_string(&self) -> String {
String::from(match self {
PackageManager::Homebrew => "Homebrew",
PackageManager::MacPorts => "MacPorts",
PackageManager::Pacman => "pacman",
PackageManager::Portage => "portage",
PackageManager::Dpkg => "dpkg",
PackageManager::Opkg => "opkg",
PackageManager::Xbps => "xbps",
PackageManager::Pkgsrc => "pkgsrc",
PackageManager::Apk => "apk",
PackageManager::Eopkg => "eopkg",
PackageManager::Rpm => "rpm",
PackageManager::Cargo => "cargo",
PackageManager::Flatpak => "flatpak",
PackageManager::Snap => "snap",
PackageManager::Android => "Android",
PackageManager::Pkg => "pkg",
PackageManager::Scoop => "Scoop",
})
}
}