Skip to content

Commit c366edd

Browse files
Change KeyValueConfigOverrides to BTreeMap<String, String>
1 parent de69410 commit c366edd

2 files changed

Lines changed: 55 additions & 9 deletions

File tree

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

Lines changed: 54 additions & 8 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};
@@ -15,11 +18,54 @@ use crate::{
1518
///
1619
/// This is backwards-compatible with the existing flat key-value YAML format
1720
/// used by `HashMap<String, String>`.
18-
#[derive(Clone, Debug, Default, Deserialize, Eq, JsonSchema, Merge, PartialEq, Serialize)]
19-
#[merge(path_overrides(merge = "crate::config::merge"))]
21+
#[derive(Clone, Debug, Default, Deserialize, Eq, JsonSchema, PartialEq, Serialize)]
2022
pub struct KeyValueConfigOverrides {
2123
#[serde(flatten)]
22-
pub overrides: BTreeMap<String, Option<String>>,
24+
pub overrides: BTreeMap<String, String>,
25+
}
26+
27+
impl<'a> KeyValueConfigOverrides {
28+
pub fn iter(&'a self) -> btree_map::Iter<'a, String, String> {
29+
self.into_iter()
30+
}
31+
}
32+
33+
impl Merge for KeyValueConfigOverrides {
34+
fn merge(&mut self, defaults: &Self) {
35+
let mut overrides = defaults.overrides.clone();
36+
overrides.extend(mem::take(&mut self.overrides));
37+
self.overrides = overrides;
38+
}
39+
}
40+
41+
impl IntoIterator for KeyValueConfigOverrides {
42+
type IntoIter = btree_map::IntoIter<String, String>;
43+
type Item = (String, String);
44+
45+
fn into_iter(self) -> Self::IntoIter {
46+
self.overrides.into_iter()
47+
}
48+
}
49+
50+
impl<'a> IntoIterator for &'a KeyValueConfigOverrides {
51+
type IntoIter = btree_map::Iter<'a, String, String>;
52+
type Item = (&'a String, &'a String);
53+
54+
fn into_iter(self) -> Self::IntoIter {
55+
self.overrides.iter()
56+
}
57+
}
58+
59+
impl<K, V, const N: usize> From<[(K, V); N]> for KeyValueConfigOverrides
60+
where
61+
K: Into<String>,
62+
V: Into<String>,
63+
{
64+
fn from(value: [(K, V); N]) -> Self {
65+
Self {
66+
overrides: value.map(|(k, v)| (k.into(), v.into())).into(),
67+
}
68+
}
2369
}
2470

2571
// Variant of [`crate::config_overrides::JsonConfigOverrides`] with the following
@@ -398,7 +444,7 @@ mod tests {
398444
#[test]
399445
fn test_json_config_overrides_from_key_value_config_overrides() {
400446
let key_value_config_overrides = KeyValueConfigOverrides {
401-
overrides: [("key".to_owned(), Some("value".to_owned()))].into(),
447+
overrides: [("key".to_owned(), "value".to_owned())].into(),
402448
};
403449

404450
let actual_json_config_overrides: JsonConfigOverrides = key_value_config_overrides.into();
@@ -413,7 +459,7 @@ mod tests {
413459
fn test_json_config_overrides_from_json_or_key_value_config_overrides() {
414460
let key_value_config_overrides =
415461
JsonOrKeyValueConfigOverrides::KeyValue(KeyValueConfigOverrides {
416-
overrides: [("key".to_owned(), Some("value".to_owned()))].into(),
462+
overrides: [("key".to_owned(), "value".to_owned())].into(),
417463
});
418464

419465
let actual_json_config_overrides: JsonConfigOverrides = key_value_config_overrides.into();
@@ -427,11 +473,11 @@ mod tests {
427473
#[test]
428474
fn test_json_or_key_value_config_overrides_merge() {
429475
let base = JsonOrKeyValueConfigOverrides::KeyValue(KeyValueConfigOverrides {
430-
overrides: [("key".to_owned(), Some("base".to_owned()))].into(),
476+
overrides: [("key".to_owned(), "base".to_owned())].into(),
431477
});
432478

433479
let patch = JsonOrKeyValueConfigOverrides::KeyValue(KeyValueConfigOverrides {
434-
overrides: [("key".to_owned(), Some("patch".to_owned()))].into(),
480+
overrides: [("key".to_owned(), "patch".to_owned())].into(),
435481
});
436482

437483
// 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)