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  }