internal/parser/schema.go (45 lines of code) (raw):

package parser import ( "fmt" "github.com/hashicorp/hcl/v2" "github.com/hashicorp/hcl/v2/hclsyntax" ) func ExtractAzureResourceType(block *hclsyntax.Block) *string { typeAttr := AttributeWithName(block, "type") if typeAttr == nil { return nil } return ToLiteral(typeAttr.Expr) } func ExtractAction(block *hclsyntax.Block) *string { typeAttr := AttributeWithName(block, "action") if typeAttr == nil { return nil } return ToLiteral(typeAttr.Expr) } func JsonEncodeExpressionToHclNode(data []byte, expression hclsyntax.Expression) *HclNode { r, err := rangeOfJsonEncodeBody(expression) if err != nil { return nil } tokens, _ := hclsyntax.LexExpression(data[r.Start.Byte:r.End.Byte], "", r.Start) return BuildHclNode(tokens) } func rangeOfJsonEncodeBody(expression hclsyntax.Expression) (*hcl.Range, error) { if expression == nil { return nil, nil } if funcCallExpr, ok := expression.(*hclsyntax.FunctionCallExpr); ok { if funcCallExpr.Name != "jsonencode" { return nil, fmt.Errorf("expression is not funcation jsonencode") } if len(funcCallExpr.Args) != 1 { return nil, fmt.Errorf("invalid args length for jsonencode") } r := funcCallExpr.Args[0].Range() return &r, nil } else { return nil, fmt.Errorf("expression is not funcation call expression") } }