mirror of https://github.com/k3s-io/k3s
96 lines
1.8 KiB
Go
96 lines
1.8 KiB
Go
package mesos
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
)
|
|
|
|
type labelList []Label // convenience type, for working with unwrapped Label slices
|
|
|
|
// Equivalent returns true if left and right have the same labels. Order is not important.
|
|
func (left *Labels) Equivalent(right *Labels) bool {
|
|
return labelList(left.GetLabels()).Equivalent(labelList(right.GetLabels()))
|
|
}
|
|
|
|
// Equivalent returns true if left and right have the same labels. Order is not important.
|
|
func (left labelList) Equivalent(right labelList) bool {
|
|
if len(left) != len(right) {
|
|
return false
|
|
} else {
|
|
for i := range left {
|
|
found := false
|
|
for j := range right {
|
|
if left[i].Equivalent(right[j]) {
|
|
found = true
|
|
break
|
|
}
|
|
}
|
|
if !found {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
}
|
|
|
|
// Equivalent returns true if left and right represent the same Label.
|
|
func (left Label) Equivalent(right Label) bool {
|
|
if left.Key != right.Key {
|
|
return false
|
|
}
|
|
if left.Value == nil {
|
|
return right.Value == nil
|
|
} else {
|
|
return right.Value != nil && *left.Value == *right.Value
|
|
}
|
|
}
|
|
|
|
func (left Label) writeTo(w io.Writer) (n int64, err error) {
|
|
write := func(s string) {
|
|
if err != nil {
|
|
return
|
|
}
|
|
var n2 int
|
|
n2, err = io.WriteString(w, s)
|
|
n += int64(n2)
|
|
}
|
|
write(left.Key)
|
|
if s := left.GetValue(); s != "" {
|
|
write("=")
|
|
write(s)
|
|
}
|
|
return
|
|
}
|
|
|
|
func (left *Labels) writeTo(w io.Writer) (n int64, err error) {
|
|
var (
|
|
lab = left.GetLabels()
|
|
n2 int
|
|
n3 int64
|
|
)
|
|
for i := range lab {
|
|
if i > 0 {
|
|
n2, err = io.WriteString(w, ",")
|
|
n += int64(n2)
|
|
if err != nil {
|
|
break
|
|
}
|
|
}
|
|
n3, err = lab[i].writeTo(w)
|
|
n += n3
|
|
if err != nil {
|
|
break
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func (left *Labels) Format() string {
|
|
if left == nil {
|
|
return ""
|
|
}
|
|
var b bytes.Buffer
|
|
left.writeTo(&b)
|
|
return b.String()
|
|
}
|