(values []any)
| 357 | } |
| 358 | |
| 359 | func csvArrayValue(values []any) string { |
| 360 | if len(values) == 0 { |
| 361 | return "" |
| 362 | } |
| 363 | |
| 364 | // Scalar arrays use semicolons for compactness. This is lossy if an |
| 365 | // element contains a semicolon; use JSON mode when exact reconstruction matters. |
| 366 | parts := make([]string, 0, len(values)) |
| 367 | for _, value := range values { |
| 368 | switch value.(type) { |
| 369 | case map[string]any, []any: |
| 370 | encoded, err := json.Marshal(value) |
| 371 | if err != nil { |
| 372 | parts = append(parts, scalarCSVValue(value)) |
| 373 | } else { |
| 374 | parts = append(parts, string(encoded)) |
| 375 | } |
| 376 | default: |
| 377 | parts = append(parts, scalarCSVValue(value)) |
| 378 | } |
| 379 | } |
| 380 | return strings.Join(parts, ";") |
| 381 | } |
| 382 | |
| 383 | func scalarCSVRow(value any) map[string]string { |
| 384 | return map[string]string{"value": scalarCSVValue(value)} |
no test coverage detected