internal/rest/filter_helpers.go
Rama main · réplica de lectura del repositorio original.
package rest
import (
"fmt"
"strings"
"time"
)
func parseLabelFilter(raw string) (map[string]string, error) {
raw = strings.TrimSpace(raw)
if raw == "" {
return nil, nil
}
labels := make(map[string]string)
for _, part := range strings.Split(raw, ",") {
part = strings.TrimSpace(part)
if part == "" {
continue
}
key, value, ok := strings.Cut(part, "=")
if !ok {
return nil, fmt.Errorf("labels must be comma-separated key=value pairs")
}
key = strings.TrimSpace(key)
value = strings.TrimSpace(value)
if key == "" || value == "" {
return nil, fmt.Errorf("labels must be comma-separated key=value pairs")
}
labels[key] = value
}
if len(labels) == 0 {
return nil, nil
}
return labels, nil
}
// parseDateFilter parses a YYYY-MM-DD date (the start of that day, or its
// end when endOfDay) or an exact RFC3339 timestamp, such as an import's
// imported_at.
func parseDateFilter(raw string, endOfDay bool) (*time.Time, error) {
raw = strings.TrimSpace(raw)
if raw == "" {
return nil, nil
}
if ts, err := time.Parse(time.RFC3339Nano, raw); err == nil {
return &ts, nil
}
t, err := time.Parse("2006-01-02", raw)
if err != nil {
return nil, fmt.Errorf("dates must use YYYY-MM-DD or RFC3339")
}
if endOfDay {
t = t.Add(24*time.Hour - time.Nanosecond)
}
return &t, nil
}