Files
dotfiles/mgr/src/systemd.rs

41 lines
1.0 KiB
Rust
Raw Normal View History

use thiserror::Error;
use super::cmd;
#[derive(Error, Debug)]
pub enum Error {
#[error(transparent)]
Cmd(#[from] cmd::Error),
#[error("unknown status output: \"{output}\"")]
UnknownStatusOutput { output: String },
}
#[derive(Debug, Clone, Copy)]
pub(crate) enum UnitStatus {
Active,
Inactive,
Failed,
}
impl UnitStatus {
pub(crate) fn is_active(self) -> bool {
matches!(self, Self::Active)
}
}
pub(crate) mod user {
use super::{super::cmd, Error, UnitStatus};
pub(crate) fn unit_status(unit: &str) -> Result<UnitStatus, Error> {
let output = cmd::run_command("systemctl", &["--user", "is-active", unit])?;
match output.stdout.as_str().trim() {
"active" | "activating" | "reloading" | "refreshing" => Ok(UnitStatus::Active),
"inactive" | "deactivating" | "maintenance" => Ok(UnitStatus::Inactive),
"failed" => Ok(UnitStatus::Failed),
other => Err(Error::UnknownStatusOutput {
output: other.to_owned(),
}),
}
}
}