use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AlertEvent {
Bell,
CommandComplete,
NewTab,
TabClose,
}
impl AlertEvent {
pub fn display_name(&self) -> &'static str {
match self {
AlertEvent::Bell => "Bell",
AlertEvent::CommandComplete => "Command Complete",
AlertEvent::NewTab => "New Tab",
AlertEvent::TabClose => "Tab Close",
}
}
pub fn all() -> &'static [AlertEvent] {
&[
AlertEvent::Bell,
AlertEvent::CommandComplete,
AlertEvent::NewTab,
AlertEvent::TabClose,
]
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AlertSoundConfig {
#[serde(default = "crate::defaults::bool_true")]
pub enabled: bool,
#[serde(default = "crate::defaults::bell_sound")]
pub volume: u8,
#[serde(default)]
pub sound_file: Option<String>,
#[serde(default = "default_alert_frequency")]
pub frequency: f32,
#[serde(default = "default_alert_duration_ms")]
pub duration_ms: u64,
}
fn default_alert_frequency() -> f32 {
800.0
}
fn default_alert_duration_ms() -> u64 {
100
}
impl Default for AlertSoundConfig {
fn default() -> Self {
Self {
enabled: true,
volume: 50,
sound_file: None,
frequency: 800.0,
duration_ms: 100,
}
}
}