summaryrefslogtreecommitdiffstats
path: root/src/config.rs
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-03-28 18:13:08 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-07-10 15:37:45 +0200
commitdca0874d1dc89c341d1f17fbabca3ff6d17e48d5 (patch)
treeb99948eca4b966f079c61e2ee550c794aafb5834 /src/config.rs
parent8e8a9d9dea801dbc68324276f486deb512df08e3 (diff)
WIP Case sensitivity supportcase-sensitivity-support
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
Diffstat (limited to 'src/config.rs')
-rw-r--r--src/config.rs29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/config.rs b/src/config.rs
index b9c64b4..fa95063 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -14,6 +14,8 @@ use crate::value::{Table, Value};
/// A prioritized configuration repository. It maintains a set of
/// configuration sources, fetches values to populate those, and provides
/// them according to the source's priority.
+///
+/// By default, keys and enum variants are deserialized case sensitive, so "FOO" != "foo"
#[derive(Clone, Debug)]
pub struct Config {
defaults: HashMap<path::Expression, Value>,
@@ -22,6 +24,12 @@ pub struct Config {
/// Root of the cached configuration.
pub cache: Value,
+
+ /// Flag whether keys should be deserialized case-sensitive
+ pub(crate) keys_case_sensitive: bool,
+
+ /// Flag whether enum variants should be deserialized case-sensitive
+ pub(crate) enum_variants_case_sensitive: bool,
}
impl Default for Config {
@@ -31,23 +39,30 @@ impl Default for Config {
overrides: Default::default(),
sources: Default::default(),
cache: Value::new(None, Table::new()),
+ keys_case_sensitive: true,
+ enum_variants_case_sensitive: true,
}
}
}
impl Config {
- pub(crate) fn new(value: Value) -> Self {
- Config {
- cache: value,
- ..Default::default()
- }
- }
-
/// Creates new [`ConfigBuilder`] instance
pub fn builder() -> ConfigBuilder<DefaultState> {
ConfigBuilder::<DefaultState>::default()
}
+ pub fn with_keys_case_sensitive(mut self, b: bool) -> Self {
+ self.keys_case_sensitive = b;
+ self.cache.keys_case_sensitive = b;
+ self
+ }
+
+ pub fn with_enum_variants_case_sensitive(mut self, b: bool) -> Self {
+ self.enum_variants_case_sensitive = b;
+ self.cache.enum_variants_case_sensitive = b;
+ self
+ }
+
/// Merge in a configuration property source.
#[deprecated(since = "0.12.0", note = "please use 'ConfigBuilder' instead")]
pub fn merge<T>(&mut self, source: T) -> Result<&mut Config>