use std::fmt::Display;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
pub const MODERATE_MEMORY_PRESSURE_THRESHOLD: f64 = 0.85;
pub const HIGH_MEMORY_PRESSURE_THRESHOLD: f64 = 0.90;
pub const CRITICAL_MEMORY_PRESSURE_THRESHOLD: f64 = 0.95;
#[derive(
Debug, Default, Clone, Copy, Eq, PartialEq, PartialOrd, Ord, Serialize, Deserialize, ToSchema,
)]
#[repr(u8)]
#[serde(rename_all = "snake_case")]
pub enum MemoryPressure {
#[default]
Low = 0,
Moderate = 1,
High = 2,
Critical = 3,
}
impl TryFrom<u8> for MemoryPressure {
type Error = ();
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
0 => Ok(MemoryPressure::Low),
1 => Ok(MemoryPressure::Moderate),
2 => Ok(MemoryPressure::High),
3 => Ok(MemoryPressure::Critical),
_ => Err(()),
}
}
}
impl MemoryPressure {
pub fn as_str(&self) -> &'static str {
match self {
MemoryPressure::Low => "low",
MemoryPressure::Moderate => "moderate",
MemoryPressure::High => "high",
MemoryPressure::Critical => "critical",
}
}
}
impl Display for MemoryPressure {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(self.as_str())
}
}