in parse/parse.go [249:301]
func (p *flagParser) parseObj() (interface{}, error) {
p.input = p.input[1:]
O := map[string]interface{}{}
loop:
for {
p.ignoreWhitespace()
if p.input[0] == '}' {
p.input = p.input[1:]
break
}
k, err := p.parseKey()
if err != nil {
return nil, err
}
p.ignoreWhitespace()
if err := p.expectChar(':'); err != nil {
return nil, err
}
v, err := p.parseValue(objValueStopSet)
if err != nil {
return nil, err
}
if p.input == "" {
return nil, errors.New("dictionary expected ',' or '}'")
}
O[k] = v
next := p.input[0]
p.input = p.input[1:]
switch next {
case '}':
break loop
case ',':
continue
default:
return nil, errors.New("dictionary expected ',' or '}'")
}
}
// empty object
if len(O) == 0 {
return nil, nil
}
return O, nil
}