| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package config
- import (
- "encoding/json"
- "fmt"
- "strings"
- )
- // ParseChecklistValue parses a checklist argument wire value.
- // Values must be JSON arrays, or a single choice without commas.
- func ParseChecklistValue(value string) ([]string, error) {
- trimmed := strings.TrimSpace(value)
- if trimmed == "" {
- return nil, nil
- }
- if strings.HasPrefix(trimmed, "[") {
- return parseJSONChecklistValue(trimmed)
- }
- if strings.Contains(trimmed, ",") {
- return nil, fmt.Errorf("checklist value uses legacy comma-separated format; use a JSON array instead")
- }
- return []string{trimmed}, nil
- }
- func parseJSONChecklistValue(value string) ([]string, error) {
- var values []string
- if err := json.Unmarshal([]byte(value), &values); err != nil {
- return nil, fmt.Errorf("invalid checklist JSON value: %w", err)
- }
- for _, segment := range values {
- if strings.TrimSpace(segment) == "" {
- return nil, fmt.Errorf("checklist value contains an empty segment")
- }
- }
- return values, nil
- }
- // FormatChecklistValue serializes selected checklist values for API transport.
- func FormatChecklistValue(values []string) (string, error) {
- if len(values) == 0 {
- return "", nil
- }
- encoded, err := json.Marshal(values)
- if err != nil {
- return "", fmt.Errorf("encoding checklist value: %w", err)
- }
- return string(encoded), nil
- }
|