Skip to content

Commit 209d081

Browse files
feat: Use sorting algorithm for IntoIterator for EnvVarSet
1 parent 0f2c0a3 commit 209d081

1 file changed

Lines changed: 56 additions & 77 deletions

File tree

crates/stackable-operator/src/v2/builder/pod/container.rs

Lines changed: 56 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::{
2-
collections::{BTreeMap, BTreeSet, btree_map},
2+
collections::{BTreeMap, BTreeSet},
33
str::FromStr,
4+
vec,
45
};
56

67
use regex::Regex;
@@ -168,6 +169,15 @@ impl From<EnvVarSet> for Vec<EnvVar> {
168169
}
169170
}
170171

172+
impl IntoIterator for EnvVarSet {
173+
type IntoIter = vec::IntoIter<Self::Item>;
174+
type Item = EnvVar;
175+
176+
fn into_iter(self) -> Self::IntoIter {
177+
Vec::from(self).into_iter()
178+
}
179+
}
180+
171181
/// Resolves dependencies between environment variables and provides sort keys which take these
172182
/// dependencies into account
173183
pub struct EnvVarDependencyResolver<'a> {
@@ -492,15 +502,6 @@ impl<'a> EnvVarDependencyResolver<'a> {
492502
}
493503
}
494504

495-
impl IntoIterator for EnvVarSet {
496-
type IntoIter = btree_map::IntoValues<EnvVarName, Self::Item>;
497-
type Item = EnvVar;
498-
499-
fn into_iter(self) -> Self::IntoIter {
500-
self.0.into_values()
501-
}
502-
}
503-
504505
#[cfg(test)]
505506
mod tests {
506507
use std::str::FromStr;
@@ -692,89 +693,67 @@ mod tests {
692693
}
693694

694695
#[test]
695-
fn test_envvarset_with_references() {
696+
fn test_vec_envvar_from_envvarset() {
696697
let env_var_set = EnvVarSet::new()
697-
.with_value(&EnvVarName::from_str_unsafe("ENV1"), "value1")
698-
// valid reference to a later variable
699-
.with_value(&EnvVarName::from_str_unsafe("ENV2"), "$(ENV3)")
700-
// valid reference to a later variable
701-
.with_value(&EnvVarName::from_str_unsafe("ENV3"), "$(ENV4)")
702-
// valid reference to an earlier variable
703-
.with_value(&EnvVarName::from_str_unsafe("ENV4"), "$(ENV1)")
704-
// invalid reference
705-
.with_value(&EnvVarName::from_str_unsafe("ENV5"), "$(ENV?)")
706-
// Same keys are allowed in Kubernetes, but not in `EnvVarSet`.
707-
// The existing ENV1 is overridden.
708-
.with_value(&EnvVarName::from_str_unsafe("ENV6"), "value6")
709-
.with_value(&EnvVarName::from_str_unsafe("ENV6"), "$(ENV6)")
710-
// multiple references
711-
.with_value(
712-
&EnvVarName::from_str_unsafe("ENV7"),
713-
"$(ENV5) $(ENV8) $(ENV2)",
714-
)
715-
// multiple references with escaped and invalid references
716-
.with_value(
717-
&EnvVarName::from_str_unsafe("ENV8"),
718-
"$(ENV1) $$(ENV9) $() $(ENV2)",
719-
)
720-
// No value
721-
.with_field_path(&EnvVarName::from_str_unsafe("ENV9"), &FieldPathEnvVar::Name);
698+
.with_value(&EnvVarName::from_str_unsafe("ENV1"), "$(ENV2)")
699+
.with_value(&EnvVarName::from_str_unsafe("ENV2"), "value 2")
700+
.with_value(&EnvVarName::from_str_unsafe("ENV3"), "value 3");
722701

723702
assert_eq!(
724703
vec![
725-
EnvVar {
726-
name: "ENV1".to_owned(),
727-
value: Some("value1".to_owned()),
728-
value_from: None
729-
},
730-
EnvVar {
731-
name: "ENV4".to_owned(),
732-
value: Some("$(ENV1)".to_owned()),
733-
value_from: None
734-
},
735-
EnvVar {
736-
name: "ENV3".to_owned(),
737-
value: Some("$(ENV4)".to_owned()),
738-
value_from: None
739-
},
740704
EnvVar {
741705
name: "ENV2".to_owned(),
742-
value: Some("$(ENV3)".to_owned()),
743-
value_from: None
744-
},
745-
EnvVar {
746-
name: "ENV5".to_owned(),
747-
value: Some("$(ENV?)".to_owned()),
706+
value: Some("value 2".to_owned()),
748707
value_from: None
749708
},
750709
EnvVar {
751-
name: "ENV6".to_owned(),
752-
value: Some("$(ENV6)".to_owned()),
753-
value_from: None
754-
},
755-
EnvVar {
756-
name: "ENV8".to_owned(),
757-
value: Some("$(ENV1) $$(ENV9) $() $(ENV2)".to_owned()),
710+
name: "ENV1".to_owned(),
711+
value: Some("$(ENV2)".to_owned()),
758712
value_from: None
759713
},
760714
EnvVar {
761-
name: "ENV7".to_owned(),
762-
value: Some("$(ENV5) $(ENV8) $(ENV2)".to_owned()),
715+
name: "ENV3".to_owned(),
716+
value: Some("value 3".to_owned()),
763717
value_from: None
764718
},
765-
EnvVar {
766-
name: "ENV9".to_owned(),
767-
value: None,
768-
value_from: Some(EnvVarSource {
769-
field_ref: Some(ObjectFieldSelector {
770-
field_path: FieldPathEnvVar::Name.to_string(),
771-
..ObjectFieldSelector::default()
772-
}),
773-
..EnvVarSource::default()
774-
}),
775-
},
776719
],
777720
Vec::from(env_var_set)
778721
);
779722
}
723+
724+
#[test]
725+
fn test_envvarset_intoiterator() {
726+
let env_var_set = EnvVarSet::new()
727+
.with_value(&EnvVarName::from_str_unsafe("ENV1"), "$(ENV2)")
728+
.with_value(&EnvVarName::from_str_unsafe("ENV2"), "value 2")
729+
.with_value(&EnvVarName::from_str_unsafe("ENV3"), "value 3");
730+
731+
let mut iter = env_var_set.into_iter();
732+
733+
assert_eq!(
734+
Some(EnvVar {
735+
name: "ENV2".to_owned(),
736+
value: Some("value 2".to_owned()),
737+
value_from: None
738+
}),
739+
iter.next()
740+
);
741+
assert_eq!(
742+
Some(EnvVar {
743+
name: "ENV1".to_owned(),
744+
value: Some("$(ENV2)".to_owned()),
745+
value_from: None
746+
}),
747+
iter.next()
748+
);
749+
assert_eq!(
750+
Some(EnvVar {
751+
name: "ENV3".to_owned(),
752+
value: Some("value 3".to_owned()),
753+
value_from: None
754+
}),
755+
iter.next()
756+
);
757+
assert_eq!(None, iter.next());
758+
}
780759
}

0 commit comments

Comments
 (0)