MCPcopy Create free account
hub / github.com/openclaw/gogcli / parseSheetsTableColumnsJSON

Function parseSheetsTableColumnsJSON

internal/cmd/sheets_table_columns.go:21–71  ·  view source on GitHub ↗
(spec string, input io.Reader)

Source from the content-addressed store, hash-verified

19}
20
21func parseSheetsTableColumnsJSON(spec string, input io.Reader) ([]*sheets.TableColumnProperties, error) {
22 b, err := resolveInlineOrFileBytes(spec, input)
23 if err != nil {
24 return nil, usagef("read --columns-json: %v", err)
25 }
26
27 var raw []sheetsTableColumnInput
28 dec := json.NewDecoder(bytes.NewReader(b))
29 dec.DisallowUnknownFields()
30 if err := dec.Decode(&raw); err != nil {
31 return nil, usagef("invalid columns JSON: %v", err)
32 }
33 var extra any
34 if err := dec.Decode(&extra); err != io.EOF {
35 if err == nil {
36 return nil, usage("invalid columns JSON: multiple JSON values")
37 }
38 return nil, usagef("invalid columns JSON: %v", err)
39 }
40 if len(raw) == 0 {
41 return nil, usage("provide at least one table column")
42 }
43
44 cols := make([]*sheets.TableColumnProperties, 0, len(raw))
45 for i, in := range raw {
46 name := strings.TrimSpace(in.ColumnName)
47 if name == "" {
48 return nil, usagef("columns[%d].columnName is required", i)
49 }
50 colType, err := normalizeSheetsTableColumnType(in.ColumnType)
51 if err != nil {
52 return nil, usagef("columns[%d].columnType: %v", i, err)
53 }
54 validation := in.DataValidationRule
55 if validation == nil {
56 validation = in.DataValidation
57 }
58 if validation != nil && colType != sheetsTypeDropdown {
59 return nil, usagef("columns[%d].dataValidationRule requires columnType DROPDOWN", i)
60 }
61 col := &sheets.TableColumnProperties{
62 ColumnIndex: int64(i),
63 ColumnName: name,
64 ColumnType: colType,
65 DataValidationRule: validation,
66 }
67 col.ForceSendFields = []string{"ColumnIndex"}
68 cols = append(cols, col)
69 }
70 return cols, nil
71}
72
73func normalizeSheetsTableColumnType(input string) (string, error) {
74 t := strings.ToUpper(strings.TrimSpace(input))

Calls 4

resolveInlineOrFileBytesFunction · 0.85
usagefFunction · 0.85
usageFunction · 0.85