use crate::domain::{
BiosInfo, ChassisInfo, CpuInfo, GpuInfo, MemoryInfo, MotherboardInfo, NetworkInfo, NumaNode,
StorageInfo, SystemError, SystemInfo,
};
use async_trait::async_trait;
use std::collections::HashMap;
#[async_trait]
pub trait SystemInfoProvider: Send + Sync {
async fn get_cpu_info(&self) -> Result<CpuInfo, SystemError>;
async fn get_memory_info(&self) -> Result<MemoryInfo, SystemError>;
async fn get_storage_info(&self) -> Result<StorageInfo, SystemError>;
async fn get_gpu_info(&self) -> Result<GpuInfo, SystemError>;
async fn get_network_info(&self) -> Result<NetworkInfo, SystemError>;
async fn get_bios_info(&self) -> Result<BiosInfo, SystemError>;
async fn get_chassis_info(&self) -> Result<ChassisInfo, SystemError>;
async fn get_motherboard_info(&self) -> Result<MotherboardInfo, SystemError>;
async fn get_system_info(&self) -> Result<SystemInfo, SystemError>;
async fn get_numa_topology(&self) -> Result<HashMap<String, NumaNode>, SystemError>;
async fn get_hostname(&self) -> Result<String, SystemError>;
async fn get_fqdn(&self) -> Result<String, SystemError>;
async fn get_filesystems(&self) -> Result<Vec<String>, SystemError>;
async fn has_required_privileges(&self) -> Result<bool, SystemError>;
async fn get_missing_dependencies(&self) -> Result<Vec<String>, SystemError>;
}