use serde::{Deserialize, Serialize};
use crate::config::SchedulerMode;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum EdgeProfile {
Minimal,
#[default]
Standard,
Full,
}
impl std::fmt::Display for EdgeProfile {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
EdgeProfile::Minimal => write!(f, "Minimal"),
EdgeProfile::Standard => write!(f, "Standard"),
EdgeProfile::Full => write!(f, "Full"),
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct ProfilePreset {
pub shm_size_kb: u32,
pub max_processes: u16,
pub scheduler_mode: SchedulerMode,
pub offline_buffer_kb: u32,
}
impl EdgeProfile {
pub fn preset(self) -> ProfilePreset {
match self {
EdgeProfile::Minimal => ProfilePreset {
shm_size_kb: 4_096, max_processes: 16,
scheduler_mode: SchedulerMode::SingleCore,
offline_buffer_kb: 512,
},
EdgeProfile::Standard => ProfilePreset {
shm_size_kb: 65_536, max_processes: 64,
scheduler_mode: SchedulerMode::MultiCore,
offline_buffer_kb: 8_192,
},
EdgeProfile::Full => ProfilePreset {
shm_size_kb: 262_144, max_processes: 256,
scheduler_mode: SchedulerMode::MultiCore,
offline_buffer_kb: 32_768,
},
}
}
}