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 }