MCPcopy Index your code
hub / github.com/cli/cli / parseFields

Function parseFields

pkg/cmd/api/fields.go:16–120  ·  view source on GitHub ↗
(opts *ApiOptions)

Source from the content-addressed store, hash-verified

14)
15
16func parseFields(opts *ApiOptions) (map[string]interface{}, error) {
17 params := make(map[string]interface{})
18 parseField := func(f string, isMagic bool) error {
19 var valueIndex int
20 var keystack []string
21 keyStartAt := 0
22 parseLoop:
23 for i, r := range f {
24 switch r {
25 case keyStart:
26 if keyStartAt == 0 {
27 keystack = append(keystack, f[0:i])
28 }
29 keyStartAt = i + 1
30 case keyEnd:
31 keystack = append(keystack, f[keyStartAt:i])
32 case keySeparator:
33 if keyStartAt == 0 {
34 keystack = append(keystack, f[0:i])
35 }
36 valueIndex = i + 1
37 break parseLoop
38 }
39 }
40
41 if len(keystack) == 0 {
42 return fmt.Errorf("invalid key: %q", f)
43 }
44
45 key := f
46 var value interface{} = nil
47 if valueIndex == 0 {
48 if keystack[len(keystack)-1] != "" {
49 return fmt.Errorf("field %q requires a value separated by an '=' sign", key)
50 }
51 } else {
52 key = f[0 : valueIndex-1]
53 value = f[valueIndex:]
54 }
55
56 if isMagic && value != nil {
57 var err error
58 value, err = magicFieldValue(value.(string), opts)
59 if err != nil {
60 return fmt.Errorf("error parsing %q value: %w", key, err)
61 }
62 }
63
64 destMap := params
65 isArray := false
66 var subkey string
67 for _, k := range keystack {
68 if k == "" {
69 isArray = true
70 continue
71 }
72 if subkey != "" {
73 var err error

Callers 4

apiRunFunction · 0.70
Test_parseFieldsFunction · 0.70
Test_parseFields_nestedFunction · 0.70
Test_parseFields_errorsFunction · 0.70

Calls 5

addParamsSliceFunction · 0.85
addParamsMapFunction · 0.85
parseFieldFunction · 0.85
magicFieldValueFunction · 0.70
ErrorfMethod · 0.65

Tested by 3

Test_parseFieldsFunction · 0.56
Test_parseFields_nestedFunction · 0.56
Test_parseFields_errorsFunction · 0.56