diff options
Diffstat (limited to 'tedge_config/src/config_setting.rs')
-rw-r--r-- | tedge_config/src/config_setting.rs | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/tedge_config/src/config_setting.rs b/tedge_config/src/config_setting.rs index c34d1fc9..fde2c46c 100644 --- a/tedge_config/src/config_setting.rs +++ b/tedge_config/src/config_setting.rs @@ -27,6 +27,24 @@ pub trait ConfigSettingAccessor<T: ConfigSetting> { fn unset(&mut self, _setting: T) -> ConfigSettingResult<()>; } +/// Extension trait that provides methods to query a setting as a String or +/// update a setting provided a String value. +pub trait ConfigSettingAccessorStringExt<T: ConfigSetting>: ConfigSettingAccessor<T> { + /// Read a configuration setting and convert it into a String. + fn query_string(&self, setting: T) -> ConfigSettingResult<String>; + + fn query_string_optional(&self, setting: T) -> ConfigSettingResult<Option<String>> { + match self.query_string(setting) { + Ok(value) => Ok(Some(value)), + Err(ConfigSettingError::ConfigNotSet { .. }) => Ok(None), + Err(err) => Err(err), + } + } + + /// Update a configuration setting from a String value + fn update_string(&mut self, setting: T, value: String) -> ConfigSettingResult<()>; +} + pub type ConfigSettingResult<T> = Result<T, ConfigSettingError>; #[derive(thiserror::Error, Debug)] @@ -37,6 +55,12 @@ pub enum ConfigSettingError { )] ConfigNotSet { key: &'static str }, - #[error("Readonly setting")] - ReadonlySetting, + #[error("Readonly setting: {message}")] + ReadonlySetting { message: &'static str }, + + #[error("Conversion from String failed")] + ConversionFromStringFailed, + + #[error("Conversion into String failed")] + ConversionIntoStringFailed, } |