github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/azure/arm/parser/armjson/parse_array.go (about) 1 package armjson 2 3 import ( 4 "fmt" 5 6 "github.com/khulnasoft-lab/defsec/pkg/types" 7 ) 8 9 func (p *parser) parseArray(parentMetadata *types.Metadata) (Node, error) { 10 n, metadata := p.newNode(KindArray, parentMetadata) 11 12 c, err := p.next() 13 if err != nil { 14 return nil, err 15 } 16 17 if c != '[' { 18 return nil, p.makeError("expecting object delimiter") 19 } 20 if err := p.parseWhitespace(); err != nil { 21 return nil, err 22 } 23 // we've hit the end of the object 24 if p.swallowIfEqual(']') { 25 n.end = p.position 26 return n, nil 27 } 28 29 // for each element 30 for { 31 32 if err := p.parseWhitespace(); err != nil { 33 return nil, err 34 } 35 36 val, err := p.parseElement(metadata) 37 if err != nil { 38 return nil, err 39 } 40 val.(*node).ref = fmt.Sprintf("[%d]", len(n.content)) 41 42 n.content = append(n.content, val) 43 44 // we've hit the end of the array 45 if p.swallowIfEqual(']') { 46 n.end = p.position 47 return n, nil 48 } 49 50 if !p.swallowIfEqual(',') { 51 return nil, p.makeError("unexpected character - expecting , or ]") 52 } 53 } 54 }