...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package csv
16
17 import (
18 "encoding/csv"
19 "io"
20 "strings"
21
22 "cuelang.org/go/cue"
23 )
24
25
26 func Encode(x cue.Value) (string, error) {
27 var b strings.Builder
28 w := csv.NewWriter(&b)
29 iter, err := x.List()
30 if err != nil {
31 return "", err
32 }
33 for iter.Next() {
34 row, err := iter.Value().List()
35 if err != nil {
36 return "", err
37 }
38 a := []string{}
39 for row.Next() {
40 col := row.Value()
41 if str, err := col.String(); err == nil {
42 a = append(a, str)
43 } else {
44 b, err := col.MarshalJSON()
45 if err != nil {
46 return "", err
47 }
48 a = append(a, string(b))
49 }
50 }
51 _ = w.Write(a)
52 }
53 w.Flush()
54 return b.String(), nil
55 }
56
57
58 func Decode(r io.Reader) ([][]string, error) {
59 return csv.NewReader(r).ReadAll()
60 }
61
View as plain text