use std::fmt;
use super::constants::{LARGE_TIER_MAX_GB, MEDIUM_TIER_MAX_GB, MINIMUM_SUPPORTED_RAM_MB};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MemoryTier {
Degraded,
Medium,
Large,
XLarge,
}
impl fmt::Display for MemoryTier {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(match self {
MemoryTier::Degraded => "Degraded",
MemoryTier::Medium => "Medium",
MemoryTier::Large => "Large",
MemoryTier::XLarge => "XLarge",
})
}
}
impl MemoryTier {
pub fn from_total_ram_mb(total_ram_mb: u64) -> Self {
if total_ram_mb < MINIMUM_SUPPORTED_RAM_MB {
return MemoryTier::Degraded;
}
let gb = total_ram_mb / 1024;
if gb <= MEDIUM_TIER_MAX_GB {
MemoryTier::Medium
} else if gb <= LARGE_TIER_MAX_GB {
MemoryTier::Large
} else {
MemoryTier::XLarge
}
}
pub fn is_degraded(self) -> bool {
matches!(self, MemoryTier::Degraded)
}
pub fn batch_size_hard_cap(self) -> usize {
match self {
MemoryTier::Degraded => 64,
MemoryTier::Medium => 128,
MemoryTier::Large => 256,
MemoryTier::XLarge => 512,
}
}
}