/* * meli - notifications conf module * * Copyright 2018 Manos Pitsidianakis * * This file is part of meli. * * meli is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * meli is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with meli. If not, see . */ 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)] #[serde(deny_unknown_fields)] pub struct NotificationsSettings { /// Enable notifications. /// Default: True #[serde(default = "true_val")] pub enable: bool, /// A command to pipe notifications through /// Default: None #[serde(default = "none")] pub script: Option, /// A file location which has its size changed when new mail arrives (max 128 bytes). Can be /// used to trigger new mail notifications eg with `xbiff(1)` /// Default: None #[serde(default = "none", alias = "xbiff-file-path")] pub xbiff_file_path: Option, #[serde(default = "internal_value_false", alias = "play-sound")] pub play_sound: ToggleFlag, #[serde(default = "none", alias = "sound-file")] pub sound_file: Option, } impl Default for NotificationsSettings { fn default() -> Self { Self { enable: true, script: None, xbiff_file_path: None, play_sound: ToggleFlag::InternalVal(false), sound_file: None, } } } impl DotAddressable for NotificationsSettings { fn lookup(&self, parent_field: &str, path: &[&str]) -> Result { 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())?), } } }