36 lines
1.3 KiB
Rust
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>;
|
|
}
|