///|
/// A deterministic, sorted label set.
pub(all) struct LabelSet {
labels : Array[(String, String)]
} derive(Eq, @debug.Debug)
///|
pub fn LabelSet::empty() -> LabelSet {
{ labels: [], }
}
///|
pub fn LabelSet::new(labels : Array[(String, String)]) -> LabelSet {
let merged : Array[(String, String)] = []
for pair in labels {
let mut replaced = false
for i in 0.. left.0.compare(right.0))
{ labels: merged, }
}
///|
pub fn LabelSet::get(self : LabelSet, name : StringView) -> String? {
let key = name.to_owned()
for pair in self.labels {
if pair.0 == key {
return Some(pair.1)
}
}
None
}
///|
pub fn LabelSet::contains(self : LabelSet, name : StringView) -> Bool {
self.get(name) is Some(_)
}
///|
pub fn LabelSet::set(
self : LabelSet,
name : String,
value : String,
) -> LabelSet {
let next : Array[(String, String)] = []
for pair in self.labels {
if pair.0 != name {
next.push(pair)
}
}
next.push((name, value))
LabelSet::new(next)
}
///|
pub fn LabelSet::remove(self : LabelSet, name : StringView) -> LabelSet {
let key = name.to_owned()
let next : Array[(String, String)] = []
for pair in self.labels {
if pair.0 != key {
next.push(pair)
}
}
{ labels: next, }
}
///|
pub fn LabelSet::without(self : LabelSet, names : Array[String]) -> LabelSet {
let next : Array[(String, String)] = []
for pair in self.labels {
let mut remove = false
for name in names {
if pair.0 == name {
remove = true
break
}
}
if !remove {
next.push(pair)
}
}
{ labels: next, }
}
///|
pub fn LabelSet::only(self : LabelSet, names : Array[String]) -> LabelSet {
let next : Array[(String, String)] = []
for pair in self.labels {
let mut keep = false
for name in names {
if pair.0 == name {
keep = true
break
}
}
if keep {
next.push(pair)
}
}
{ labels: next, }
}
///|
pub fn LabelSet::to_string(self : LabelSet) -> String {
let builder = StringBuilder()
builder.write_string("{")
for i, pair in self.labels {
if i > 0 {
builder.write_string(",")
}
builder.write_string(pair.0)
builder.write_string("=\"")
builder.write_string(pair.1)
builder.write_string("\"")
}
builder.write_string("}")
builder.to_string()
}