summaryrefslogtreecommitdiffstats
path: root/src/conf
diff options
context:
space:
mode:
authorManos Pitsidianakis <el13635@mail.ntua.gr>2020-09-10 20:57:15 +0300
committerManos Pitsidianakis <el13635@mail.ntua.gr>2020-09-10 21:19:38 +0300
commit65357625eaaf725e76f95a00d626c286b7993566 (patch)
tree53cc3f7a2129018a60d9590d1670308536febbe0 /src/conf
parent1ac3a7a903e50ec72a092c3de4fe81d633e1d43a (diff)
conf: impl DotAddressable for NotificationsSettings
Diffstat (limited to 'src/conf')
-rw-r--r--src/conf/notifications.rs27
-rw-r--r--src/conf/overrides.rs2
2 files changed, 26 insertions, 3 deletions
diff --git a/src/conf/notifications.rs b/src/conf/notifications.rs
index 25756765..6502662a 100644
--- a/src/conf/notifications.rs
+++ b/src/conf/notifications.rs
@@ -20,6 +20,8 @@
*/
use super::default_vals::{internal_value_false, none, true_val};
+use super::DotAddressable;
+use melib::{MeliError, Result, ToggleFlag};
/// Settings for the notifications function.
#[derive(Debug, Serialize, Deserialize, Clone)]
@@ -39,7 +41,7 @@ pub struct NotificationsSettings {
#[serde(default = "none", alias = "xbiff-file-path")]
pub xbiff_file_path: Option<String>,
#[serde(default = "internal_value_false", alias = "play-sound")]
- pub play_sound: super::ToggleFlag,
+ pub play_sound: ToggleFlag,
#[serde(default = "none", alias = "sound-file")]
pub sound_file: Option<String>,
}
@@ -50,8 +52,29 @@ impl Default for NotificationsSettings {
enable: true,
script: None,
xbiff_file_path: None,
- play_sound: super::ToggleFlag::InternalVal(false),
+ play_sound: ToggleFlag::InternalVal(false),
sound_file: None,
}
}
}
+impl DotAddressable for NotificationsSettings {
+ fn lookup(&self, parent_field: &str, path: &[&str]) -> Result<String> {
+ match path.first() {
+ Some(field) => {
+ let tail = &path[1..];
+ match *field {
+ "enable" => self.enable.lookup(field, tail),
+ "script" => self.script.lookup(field, tail),
+ "xbiff_file_path" => self.xbiff_file_path.lookup(field, tail),
+ "play_sound" => self.play_sound.lookup(field, tail),
+ "sound_file" => self.sound_file.lookup(field, tail),
+ other => Err(MeliError::new(format!(
+ "{} has no field named {}",
+ parent_field, other
+ ))),
+ }
+ }
+ None => Ok(toml::to_string(self).map_err(|err| err.to_string())?),
+ }
+ }
+}
diff --git a/src/conf/overrides.rs b/src/conf/overrides.rs
index 14ac388a..45d30274 100644
--- a/src/conf/overrides.rs
+++ b/src/conf/overrides.rs
@@ -151,7 +151,7 @@ pub struct NotificationsSettingsOverride {
pub xbiff_file_path: Option<Option<String>>,
#[serde(alias = "play-sound")]
#[serde(default)]
- pub play_sound: Option<super::ToggleFlag>,
+ pub play_sound: Option<ToggleFlag>,
#[serde(alias = "sound-file")]
#[serde(default)]
pub sound_file: Option<Option<String>>,