package rest import ( "fmt" "os" "regexp" "sort" "strings" ) func firstRegexMatch(pattern *regexp.Regexp, value string) string { match := pattern.FindString(value) return strings.TrimSpace(match) } func compactStringMap(values map[string]string) map[string]string { if len(values) == 0 { return nil } out := map[string]string{} for key, value := range values { if trimmed := strings.TrimSpace(value); trimmed != "" { out[key] = trimmed } } if len(out) == 0 { return nil } return out } func compactAnyMap(values map[string]any) map[string]any { out := map[string]any{} for key, value := range values { if value == nil { continue } switch typed := value.(type) { case string: if strings.TrimSpace(typed) == "" { continue } case []string: if len(typed) == 0 { continue } case []any: if len(typed) == 0 { continue } } out[key] = value } return out } func stringValue(value any) string { switch typed := value.(type) { case string: return typed case fmt.Stringer: return typed.String() default: return fmt.Sprintf("%v", value) } } func stringSliceValue(value any) []string { switch typed := value.(type) { case []string: return typed case []any: out := make([]string, 0, len(typed)) for _, item := range typed { out = append(out, stringValue(item)) } return out default: return nil } } func uniqueStrings(values []string) []string { seen := map[string]bool{} out := []string{} for _, value := range values { trimmed := strings.TrimSpace(value) if trimmed == "" || seen[trimmed] { continue } seen[trimmed] = true out = append(out, trimmed) } sort.Strings(out) return out } func clipString(value string, limit int) string { value = strings.TrimSpace(value) if limit <= 0 || len(value) <= limit { return value } return strings.TrimSpace(value[:limit]) + "..." } func fileExists(path string) bool { if path == "" { return false } info, err := os.Stat(path) return err == nil && info != nil }