Skip to content

Commit 451088f

Browse files
Change KeyValueConfigOverrides to BTreeMap<String, String> (#1219)
1 parent de69410 commit 451088f

2 files changed

Lines changed: 55 additions & 12 deletions

File tree

crates/stackable-operator/src/v2/config_overrides.rs

Lines changed: 54 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use std::collections::BTreeMap;
1+
use std::{
2+
collections::{BTreeMap, btree_map},
3+
mem,
4+
};
25

36
use schemars::JsonSchema;
47
use serde::{Deserialize, Serialize};
@@ -12,14 +15,54 @@ use crate::{
1215
// Variant of [`crate::config_overrides::KeyValueConfigOverrides`] that implements
1316
// Merge
1417
/// Flat key-value overrides for `*.properties`, Hadoop XML, etc.
15-
///
16-
/// This is backwards-compatible with the existing flat key-value YAML format
17-
/// used by `HashMap<String, String>`.
18-
#[derive(Clone, Debug, Default, Deserialize, Eq, JsonSchema, Merge, PartialEq, Serialize)]
19-
#[merge(path_overrides(merge = "crate::config::merge"))]
18+
#[derive(Clone, Debug, Default, Deserialize, Eq, JsonSchema, PartialEq, Serialize)]
2019
pub struct KeyValueConfigOverrides {
2120
#[serde(flatten)]
22-
pub overrides: BTreeMap<String, Option<String>>,
21+
pub overrides: BTreeMap<String, String>,
22+
}
23+
24+
impl<'a> KeyValueConfigOverrides {
25+
pub fn iter(&'a self) -> btree_map::Iter<'a, String, String> {
26+
self.into_iter()
27+
}
28+
}
29+
30+
impl Merge for KeyValueConfigOverrides {
31+
fn merge(&mut self, defaults: &Self) {
32+
let mut overrides = defaults.overrides.clone();
33+
overrides.extend(mem::take(&mut self.overrides));
34+
self.overrides = overrides;
35+
}
36+
}
37+
38+
impl IntoIterator for KeyValueConfigOverrides {
39+
type IntoIter = btree_map::IntoIter<String, String>;
40+
type Item = (String, String);
41+
42+
fn into_iter(self) -> Self::IntoIter {
43+
self.overrides.into_iter()
44+
}
45+
}
46+
47+
impl<'a> IntoIterator for &'a KeyValueConfigOverrides {
48+
type IntoIter = btree_map::Iter<'a, String, String>;
49+
type Item = (&'a String, &'a String);
50+
51+
fn into_iter(self) -> Self::IntoIter {
52+
self.overrides.iter()
53+
}
54+
}
55+
56+
impl<K, V, const N: usize> From<[(K, V); N]> for KeyValueConfigOverrides
57+
where
58+
K: Into<String>,
59+
V: Into<String>,
60+
{
61+
fn from(value: [(K, V); N]) -> Self {
62+
Self {
63+
overrides: value.map(|(k, v)| (k.into(), v.into())).into(),
64+
}
65+
}
2366
}
2467

2568
// Variant of [`crate::config_overrides::JsonConfigOverrides`] with the following
@@ -398,7 +441,7 @@ mod tests {
398441
#[test]
399442
fn test_json_config_overrides_from_key_value_config_overrides() {
400443
let key_value_config_overrides = KeyValueConfigOverrides {
401-
overrides: [("key".to_owned(), Some("value".to_owned()))].into(),
444+
overrides: [("key".to_owned(), "value".to_owned())].into(),
402445
};
403446

404447
let actual_json_config_overrides: JsonConfigOverrides = key_value_config_overrides.into();
@@ -413,7 +456,7 @@ mod tests {
413456
fn test_json_config_overrides_from_json_or_key_value_config_overrides() {
414457
let key_value_config_overrides =
415458
JsonOrKeyValueConfigOverrides::KeyValue(KeyValueConfigOverrides {
416-
overrides: [("key".to_owned(), Some("value".to_owned()))].into(),
459+
overrides: [("key".to_owned(), "value".to_owned())].into(),
417460
});
418461

419462
let actual_json_config_overrides: JsonConfigOverrides = key_value_config_overrides.into();
@@ -427,11 +470,11 @@ mod tests {
427470
#[test]
428471
fn test_json_or_key_value_config_overrides_merge() {
429472
let base = JsonOrKeyValueConfigOverrides::KeyValue(KeyValueConfigOverrides {
430-
overrides: [("key".to_owned(), Some("base".to_owned()))].into(),
473+
overrides: [("key".to_owned(), "base".to_owned())].into(),
431474
});
432475

433476
let patch = JsonOrKeyValueConfigOverrides::KeyValue(KeyValueConfigOverrides {
434-
overrides: [("key".to_owned(), Some("patch".to_owned()))].into(),
477+
overrides: [("key".to_owned(), "patch".to_owned())].into(),
435478
});
436479

437480
// The merge implementation internally converts KeyValueConfigOverrides to

crates/stackable-operator/src/v2/role_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ mod tests {
260260
let mut cli_overrides = BTreeMap::new();
261261

262262
if let Some(value) = override_value {
263-
config_file_overrides.insert("property".to_owned(), Some(value.to_owned()));
263+
config_file_overrides.insert("property".to_owned(), value.to_owned());
264264
env_overrides.insert("PROPERTY".to_owned(), value.to_owned());
265265
cli_overrides.insert("--property".to_owned(), value.to_owned());
266266
}

0 commit comments

Comments
 (0)