in pkg/transform_new_block.go [28:92]
func (n *NewBlockTransform) Decode(block *golden.HclBlock, context *hcl.EvalContext) error {
var err error
n.NewBlockType, err = getRequiredStringAttribute("new_block_type", block, context)
if err != nil {
return err
}
n.FileName, err = getRequiredStringAttribute("filename", block, context)
if err != nil {
return err
}
var labels []string
labelsAttr, ok := block.Attributes()["labels"]
if ok {
labelsValue, err := labelsAttr.Value(context)
if err != nil {
return fmt.Errorf("error while evaluating labels: %+v", err)
}
for i := 0; i < labelsValue.LengthInt(); i++ {
labels = append(labels, labelsValue.Index(cty.NumberIntVal(int64(i))).AsString())
}
}
n.Labels = labels
bodyStr, err := getOptionalStringAttribute("body", block, context)
if err != nil {
return err
}
if bodyStr != nil {
n.NewBody = *bodyStr
}
n.newWriteBlock = hclwrite.NewBlock(n.NewBlockType, n.Labels)
decodeByNestedBlock := false
for _, b := range block.NestedBlocks() {
if b.Type == "asraw" {
decodeByNestedBlock = true
if err := decodeAsRawBlock(n.newWriteBlock, b); err != nil {
return err
}
continue
}
if b.Type == "asstring" {
decodeByNestedBlock = true
if err = decodeAsStringBlock(n.newWriteBlock, b, 0, context); err != nil {
return err
}
continue
}
}
if decodeByNestedBlock && n.NewBody != "" {
return fmt.Errorf("can only set either one of `asraw`, `asstring` or `body`")
}
if n.NewBody != "" {
newBody, diag := hclwrite.ParseConfig([]byte(fmt.Sprintf(`%s %s {
%s
}`, n.NewBlockType, strings.Join(n.Labels, " "), n.NewBody)), "", hcl.InitialPos)
if diag.HasErrors() {
return fmt.Errorf("cannot decode body %s: %+v", n.NewBody, diag)
}
n.newWriteBlock = newBody.Body().Blocks()[0]
}
formattedBlock, err := n.Format(n.newWriteBlock)
if err == nil {
n.newWriteBlock = formattedBlock
}
return nil
}