use std::collections::BTreeMap;
pub trait ToSelector {
fn to_selector(&self) -> String;
}
impl<S1, S2> ToSelector for BTreeMap<S1, S2>
where
S1: ToString,
S2: AsRef<str>,
{
fn to_selector(&self) -> String {
self.iter()
.map(|(k, v)| k.to_string() + "=" + v.as_ref())
.collect::<Vec<String>>()
.join(",")
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_empty() {
let labels = BTreeMap::<String, String>::new();
assert_eq!("", labels.to_selector());
}
#[test]
fn test_single() {
let mut labels = BTreeMap::new();
labels.insert("foo", "bar");
assert_eq!("foo=bar", labels.to_selector());
}
#[test]
fn test_multiple() {
let mut labels = BTreeMap::new();
labels.insert("foo", "bar");
labels.insert("bar", "baz");
let sel = labels.to_selector();
assert!(sel == "foo=bar,bar=baz" || sel == "bar=baz,foo=bar");
}
}