normalizeLabelFilter validates + dedups a labels= filter list.
(raw []string)
| 637 | |
| 638 | // normalizeLabelFilter validates + dedups a labels= filter list. |
| 639 | func normalizeLabelFilter(raw []string) ([]string, error) { |
| 640 | if len(raw) == 0 { |
| 641 | return nil, nil |
| 642 | } |
| 643 | if len(raw) > maxLabelsPerOp { |
| 644 | return nil, fmt.Errorf("labels filter exceeds cap of %d", maxLabelsPerOp) |
| 645 | } |
| 646 | seen := map[string]struct{}{} |
| 647 | out := make([]string, 0, len(raw)) |
| 648 | for _, r := range raw { |
| 649 | l, err := normalizeLabel(r, true) |
| 650 | if err != nil { |
| 651 | return nil, fmt.Errorf("labels filter: %w", err) |
| 652 | } |
| 653 | if _, dup := seen[l]; dup { |
| 654 | continue |
| 655 | } |
| 656 | seen[l] = struct{}{} |
| 657 | out = append(out, l) |
| 658 | } |
| 659 | return out, nil |
| 660 | } |
| 661 | |
| 662 | // parseRFC3339Filter parses an optional RFC3339 timestamp query param into |
| 663 | // a time, returning a 400 envelope on a malformed value. |
no test coverage detected