MCPcopy Create free account
hub / github.com/devspace-sh/devspace / key

Method key

pkg/util/strvals/strvals.go:171–247  ·  view source on GitHub ↗
(data map[string]interface{})

Source from the content-addressed store, hash-verified

169}
170
171func (t *parser) key(data map[string]interface{}) (reterr error) {
172 defer func() {
173 if r := recover(); r != nil {
174 reterr = fmt.Errorf("unable to parse key: %s", r)
175 }
176 }()
177 stop := runeSet([]rune{'=', '[', ',', '.'})
178 for {
179 switch k, last, err := runesUntil(t.sc, stop); {
180 case err != nil:
181 if len(k) == 0 {
182 return err
183 }
184 return errors.Errorf("key %q has no value", string(k))
185 //set(data, string(k), "")
186 //return err
187 case last == '[':
188 // We are in a list index context, so we need to set an index.
189 i, err := t.keyIndex()
190 if err != nil {
191 return errors.Wrap(err, "error parsing index")
192 }
193 kk := string(k)
194 // Find or create target list
195 list := []interface{}{}
196 if _, ok := data[kk]; ok {
197 list = data[kk].([]interface{})
198 }
199
200 // Now we need to get the value after the ].
201 list, err = t.listItem(list, i)
202 set(data, kk, list)
203 return err
204 case last == '=':
205 //End of key. Consume =, Get value.
206 // FIXME: Get value list first
207 vl, e := t.valList()
208 switch e {
209 case nil:
210 set(data, string(k), vl)
211 return nil
212 case io.EOF:
213 set(data, string(k), "")
214 return e
215 case ErrNotList:
216 rs, e := t.val()
217 if e != nil && e != io.EOF {
218 return e
219 }
220 v, e := t.reader(rs)
221 set(data, string(k), v)
222 return e
223 default:
224 return e
225 }
226
227 case last == ',':
228 // No value given. Set the value to empty string. Return error.

Callers 2

parseMethod · 0.95
listItemMethod · 0.95

Calls 8

keyIndexMethod · 0.95
listItemMethod · 0.95
valListMethod · 0.95
valMethod · 0.95
runeSetFunction · 0.85
runesUntilFunction · 0.85
setFunction · 0.85
ErrorfMethod · 0.45

Tested by

no test coverage detected