use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "tauri", derive(specta::Type))]
pub enum UpdateRate {
Native,
Max(u32),
}
impl UpdateRate {
pub fn normalize(self, source_hz: f64) -> Self {
match self {
UpdateRate::Native => UpdateRate::Native,
UpdateRate::Max(hz) if hz as f64 >= source_hz => UpdateRate::Native,
UpdateRate::Max(hz) => UpdateRate::Max(hz),
}
}
pub fn needs_throttle(self, source_hz: f64) -> bool {
match self.normalize(source_hz) {
UpdateRate::Native => false,
UpdateRate::Max(_) => true,
}
}
pub fn throttle_interval(self, source_hz: f64) -> Option<std::time::Duration> {
match self.normalize(source_hz) {
UpdateRate::Native => None,
UpdateRate::Max(hz) => Some(std::time::Duration::from_secs_f64(1.0 / hz as f64)),
}
}
}