summaryrefslogtreecommitdiffstats
path: root/tedge_config/src/config_setting.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tedge_config/src/config_setting.rs')
-rw-r--r--tedge_config/src/config_setting.rs28
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,
}