databricks-cli/bundle/internal/tf/codegen/generator/named_block.go

61 lines
1.2 KiB
Go

package generator
import (
"fmt"
"os"
"path/filepath"
"strings"
"text/template"
tfjson "github.com/hashicorp/terraform-json"
"github.com/iancoleman/strcase"
)
type namedBlock struct {
filePattern string
typeNamePrefix string
name string
block *tfjson.SchemaBlock
}
func (b *namedBlock) FieldName() string {
return b.camelName()
}
func (b *namedBlock) TypeBase() []string {
return []string{b.typeNamePrefix, b.camelName()}
}
func (b *namedBlock) TypeName() string {
return strings.Join(b.TypeBase(), "")
}
func (b *namedBlock) TerraformName() string {
return b.name
}
func (b *namedBlock) normalizedName() string {
return normalizeName(b.name)
}
func (b *namedBlock) camelName() string {
return strcase.ToCamel(b.normalizedName())
}
func (b *namedBlock) Generate(path string) error {
w, err := walk(b.block, []string{b.typeNamePrefix, b.camelName()})
if err != nil {
return err
}
f, err := os.Create(filepath.Join(path, fmt.Sprintf(b.filePattern, b.normalizedName())))
if err != nil {
return err
}
defer f.Close()
tmpl := template.Must(template.ParseFiles("./templates/block.go.tmpl"))
return tmpl.Execute(f, w)
}