diff options
Diffstat (limited to 'src/configs')
-rw-r--r-- | src/configs/starship_root.rs | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/configs/starship_root.rs b/src/configs/starship_root.rs index 4d26fd1ca..cefa85075 100644 --- a/src/configs/starship_root.rs +++ b/src/configs/starship_root.rs @@ -1,9 +1,8 @@ -use crate::config::ModuleConfig; +use crate::{config::ModuleConfig, module::ALL_MODULES}; use serde::Serialize; -use starship_module_config_derive::ModuleConfig; -#[derive(Clone, ModuleConfig, Serialize)] +#[derive(Clone, Serialize)] pub struct StarshipRootConfig<'a> { pub format: &'a str, pub scan_timeout: u64, @@ -88,3 +87,27 @@ impl<'a> Default for StarshipRootConfig<'a> { } } } + +impl<'a> ModuleConfig<'a> for StarshipRootConfig<'a> { + fn load_config(&mut self, config: &'a toml::Value) { + if let toml::Value::Table(config) = config { + config.iter().for_each(|(k, v)| match k.as_str() { + "format" => self.format.load_config(v), + "scan_timeout" => self.scan_timeout.load_config(v), + "command_timeout" => self.command_timeout.load_config(v), + "add_newline" => self.add_newline.load_config(v), + unknown => { + if !ALL_MODULES.contains(&unknown) && unknown != "custom" { + log::warn!("Unknown config key '{}'", unknown); + } + } + }); + } + } + + fn from_config(config: &'a toml::Value) -> Option<Self> { + let mut out = Self::default(); + out.load_config(config); + Some(out) + } +} |