use crate::error::CoreResult;
#[derive(Debug, Clone)]
pub struct StorageInfo {
pub devices: Vec<StorageDevice>,
pub optimal_io_size: usize,
pub queue_depth: usize,
pub capacity: usize,
pub available: usize,
}
impl Default for StorageInfo {
fn default() -> Self {
Self {
devices: vec![StorageDevice::default()],
optimal_io_size: 64 * 1024, queue_depth: 32,
capacity: (500u64 * 1024 * 1024 * 1024) as usize, available: (250u64 * 1024 * 1024 * 1024) as usize, }
}
}
impl StorageInfo {
pub fn detect() -> CoreResult<Self> {
Ok(Self::default())
}
pub fn supports_async_io(&self) -> bool {
self.devices.iter().any(|d| d.supports_async)
}
pub fn is_ssd(&self) -> bool {
self.devices.first().map(|d| d.is_ssd).unwrap_or(false)
}
}
#[derive(Debug, Clone)]
pub struct StorageDevice {
pub name: String,
pub device_type: StorageType,
pub is_ssd: bool,
pub supports_async: bool,
pub capacity: usize,
pub optimal_io_size: usize,
}
impl Default for StorageDevice {
fn default() -> Self {
Self {
name: "sda".to_string(),
device_type: StorageType::Ssd,
is_ssd: true,
supports_async: true,
capacity: (500u64 * 1024 * 1024 * 1024) as usize, optimal_io_size: 64 * 1024, }
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum StorageType {
Hdd,
Ssd,
Nvme,
Network,
Ram,
Unknown,
}