in pkg/options/types.go [178:237]
func (l *LabelsAllowList) Set(value string) error {
// Taken from text/scanner EOF constant.
const EOF = -1
var (
m = make(map[string][]string, len(*l))
previous rune
next rune
firstWordPos int
name string
)
firstWordPos = 0
for i, v := range value {
if i+1 == len(value) {
next = EOF
} else {
next = []rune(value)[i+1]
}
if i-1 >= 0 {
previous = []rune(value)[i-1]
} else {
previous = v
}
switch v {
case '=':
if previous == ',' || next != '[' {
return errLabelsAllowListFormat
}
name = strings.TrimSpace(string(([]rune(value)[firstWordPos:i])))
m[name] = []string{}
firstWordPos = i + 1
case '[':
if previous != '=' {
return errLabelsAllowListFormat
}
firstWordPos = i + 1
case ']':
// if after metric group, has char not comma or end.
if next != EOF && next != ',' {
return errLabelsAllowListFormat
}
if previous != '[' {
m[name] = append(m[name], strings.TrimSpace(string(([]rune(value)[firstWordPos:i]))))
}
firstWordPos = i + 1
case ',':
// if starts or ends with comma
if previous == v || next == EOF || next == ']' {
return errLabelsAllowListFormat
}
if previous != ']' {
m[name] = append(m[name], strings.TrimSpace(string(([]rune(value)[firstWordPos:i]))))
}
firstWordPos = i + 1
}
}
*l = m
return nil
}