// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: MPL-2.0 package hclwrite import ( "fmt" "strings" ) type TestTreeNode struct { Type string Val string Children []TestTreeNode } func makeTestTree(n *node) (root TestTreeNode) { const us = "hclwrite." const usPtr = "*hclwrite." root.Type = fmt.Sprintf("%T", n.content) if strings.HasPrefix(root.Type, us) { root.Type = root.Type[len(us):] } else if strings.HasPrefix(root.Type, usPtr) { root.Type = root.Type[len(usPtr):] } type WithVal interface { testValue() string } hasTestVal := false if withVal, ok := n.content.(WithVal); ok { root.Val = withVal.testValue() hasTestVal = true } n.content.walkChildNodes(func(n *node) { root.Children = append(root.Children, makeTestTree(n)) }) // If we didn't end up with any children then this is probably a leaf // node, so we'll set its content value to it raw bytes if we didn't // already set a test value. if !hasTestVal && len(root.Children) == 0 { toks := n.content.BuildTokens(nil) root.Val = toks.testValue() } return root }