aboutsummaryrefslogtreecommitdiff
path: root/src/config/model.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-04-22 17:01:25 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-04-22 17:01:25 +0300
commit4b482f37a1e233b9aca6bf99b12e8b4da3e5c05e (patch)
tree69d1a56ad6335547eec9727691310cf96ebe9623 /src/config/model.rs
parent5bd939fbfc92a8073d0eac11dfb02a31ea638b15 (diff)
feat: add terminal-delivered client notifications
Diffstat (limited to 'src/config/model.rs')
-rw-r--r--src/config/model.rs75
1 files changed, 69 insertions, 6 deletions
diff --git a/src/config/model.rs b/src/config/model.rs
index 70eede5a..e2c39f25 100644
--- a/src/config/model.rs
+++ b/src/config/model.rs
@@ -1,11 +1,19 @@
-use serde::Deserialize;
+use serde::{Deserialize, Deserializer, Serialize};
use super::{CommandKeybindConfig, SoundConfig, ThemeConfig, DEFAULT_SCROLLBACK_LIMIT_BYTES};
-#[derive(Debug, Clone, Deserialize)]
-#[serde(default)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize, Default)]
+#[serde(rename_all = "lowercase")]
+pub enum ToastDelivery {
+ #[default]
+ Off,
+ Herdr,
+ Terminal,
+}
+
+#[derive(Debug, Clone)]
pub struct ToastConfig {
- pub enabled: bool,
+ pub delivery: ToastDelivery,
}
#[derive(Debug, Default, Deserialize)]
@@ -144,7 +152,31 @@ impl Default for UiConfig {
impl Default for ToastConfig {
fn default() -> Self {
- Self { enabled: false }
+ Self {
+ delivery: ToastDelivery::Off,
+ }
+ }
+}
+
+impl<'de> Deserialize<'de> for ToastConfig {
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
+ where
+ D: Deserializer<'de>,
+ {
+ #[derive(Deserialize, Default)]
+ #[serde(default)]
+ struct RawToastConfig {
+ delivery: Option<ToastDelivery>,
+ enabled: Option<bool>,
+ }
+
+ let raw = RawToastConfig::deserialize(deserializer)?;
+ let delivery = raw.delivery.unwrap_or_else(|| match raw.enabled {
+ Some(true) => ToastDelivery::Herdr,
+ Some(false) => ToastDelivery::Off,
+ None => ToastDelivery::Off,
+ });
+ Ok(Self { delivery })
}
}
@@ -165,10 +197,41 @@ mod tests {
fn toast_config_parses() {
let toml = r#"
[ui.toast]
+delivery = "terminal"
+"#;
+ let config: Config = toml::from_str(toml).unwrap();
+ assert_eq!(config.ui.toast.delivery, ToastDelivery::Terminal);
+ }
+
+ #[test]
+ fn toast_config_legacy_enabled_true_maps_to_herdr() {
+ let toml = r#"
+[ui.toast]
+enabled = true
+"#;
+ let config: Config = toml::from_str(toml).unwrap();
+ assert_eq!(config.ui.toast.delivery, ToastDelivery::Herdr);
+ }
+
+ #[test]
+ fn toast_config_legacy_enabled_false_maps_to_off() {
+ let toml = r#"
+[ui.toast]
+enabled = false
+"#;
+ let config: Config = toml::from_str(toml).unwrap();
+ assert_eq!(config.ui.toast.delivery, ToastDelivery::Off);
+ }
+
+ #[test]
+ fn toast_config_delivery_wins_over_legacy_enabled() {
+ let toml = r#"
+[ui.toast]
enabled = true
+delivery = "terminal"
"#;
let config: Config = toml::from_str(toml).unwrap();
- assert!(config.ui.toast.enabled);
+ assert_eq!(config.ui.toast.delivery, ToastDelivery::Terminal);
}
#[test]