github.com/terraform-linters/tflint-ruleset-azurerm@v0.26.0/rules/generator-utils/main.go (about)

     1  package utils
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"regexp"
     7  	"strings"
     8  	"text/template"
     9  )
    10  
    11  var heading = regexp.MustCompile("(^[A-Za-z])|_([A-Za-z])")
    12  
    13  // ToCamel converts a string to CamelCase
    14  func ToCamel(str string) string {
    15  	exceptions := map[string]string{
    16  		"ip":  "IP",
    17  		"sql": "SQL",
    18  		"vm":  "VM",
    19  		"os":  "OS",
    20  		"id":  "ID",
    21  		"tls": "TLS",
    22  	}
    23  	parts := strings.Split(str, "_")
    24  	replaced := make([]string, len(parts))
    25  	for i, s := range parts {
    26  		conv, ok := exceptions[s]
    27  		if ok {
    28  			replaced[i] = conv
    29  		} else {
    30  			replaced[i] = s
    31  		}
    32  	}
    33  	str = strings.Join(replaced, "_")
    34  
    35  	return heading.ReplaceAllStringFunc(str, func(s string) string {
    36  		return strings.ToUpper(strings.Replace(s, "_", "", -1))
    37  	})
    38  }
    39  
    40  // GenerateFile generates a new file from the passed template and metadata
    41  func GenerateFile(fileName string, tmplName string, meta interface{}) {
    42  	file, err := os.Create(fileName)
    43  	if err != nil {
    44  		panic(err)
    45  	}
    46  
    47  	tmpl := template.Must(template.ParseFiles(tmplName))
    48  	err = tmpl.Execute(file, meta)
    49  	if err != nil {
    50  		panic(err)
    51  	}
    52  }
    53  
    54  // GenerateFileWithLogs generates a new file from the passed template and metadata
    55  // The difference from GenerateFile function is to output logs
    56  func GenerateFileWithLogs(fileName string, tmplName string, meta interface{}) {
    57  	GenerateFile(fileName, tmplName, meta)
    58  	fmt.Printf("Created: %s\n", fileName)
    59  }