Files
diagd/crates/core/src/scanner/init/provider.rs
T

36 lines
1.3 KiB
Rust

use crate::models::FailedService;
use std::fmt;
#[derive(Debug, Clone)]
pub enum ScanError {
CommandFailed(String),
PermissionDenied(String),
Io(String),
NotSupported(String),
}
impl fmt::Display for ScanError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ScanError::CommandFailed(e) => write!(f, "Init command error: {}", e),
ScanError::PermissionDenied(e) => write!(f, "Permission denied: {}", e),
ScanError::Io(e) => write!(f, "I/O error: {}", e),
ScanError::NotSupported(e) => write!(f, "Init system not supported: {}", e),
}
}
}
impl std::error::Error for ScanError {}
/// Единый трейт для взаимодействия с системами инициализации ОС
pub trait InitSystemProvider: Send + Sync {
/// Имя системы инициализации (systemd, openrc, runit, s6, dinit, bsd-rc)
fn name(&self) -> &'static str;
/// Проверка, активна ли данная система инициализации в текущем окружении
fn is_active(&self) -> bool;
/// Получение списка упавших или аварийно завершенных служб
fn get_failed_services(&self) -> Result<Vec<FailedService>, ScanError>;
}