package cautils import ( "fmt" "os" "sort" "strconv" "strings" ) const ValueNotFound = -1 func ConvertLabelsToString(labels map[string]string) string { labelsStr := "" delimiter := "" for k, v := range labels { labelsStr += fmt.Sprintf("%s%s=%s", delimiter, k, v) delimiter = ";" } return labelsStr } // ConvertStringToLabels convert a string "a=b;c=d" to map: {"a":"b", "c":"d"} func ConvertStringToLabels(labelsStr string) map[string]string { labels := make(map[string]string) labelsSlice := strings.Split(labelsStr, ";") if len(labelsSlice)%2 != 0 { return labels } for i := range labelsSlice { kvSlice := strings.Split(labelsSlice[i], "=") if len(kvSlice) != 2 { continue } labels[kvSlice[0]] = kvSlice[1] } return labels } func StringInSlice(strSlice []string, str string) int { for i := range strSlice { if strSlice[i] == str { return i } } return ValueNotFound } func StringSlicesAreEqual(a, b []string) bool { if len(a) != len(b) { return false } sort.Strings(a) sort.Strings(b) for i := range a { if a[i] != b[i] { return false } } return true } func ParseIntEnvVar(varName string, defaultValue int) (int, error) { varValue, exists := os.LookupEnv(varName) if !exists { return defaultValue, nil } intValue, err := strconv.Atoi(varValue) if err != nil { return defaultValue, fmt.Errorf("failed to parse %s env var as int: %w", varName, err) } return intValue, nil }