package generator import ( "bytes" "github.com/serenize/snaker" "go/format" "os" "path/filepath" "strings" "text/template" "time" ) func saveGoFile(dirPath, fileName string, text []byte) error { newGoFilePath := filepath.Join(dirPath, fileName) + ".go" file, err := os.Create(newGoFilePath) if err != nil { return err } defer file.Close() p, err := format.Source(text) if err != nil { return err } _, err = file.Write(p) if err != nil { return err } return nil } func ensureDirPath(dirPath string) error { if _, err := os.Stat(dirPath); os.IsNotExist(err) { err := os.MkdirAll(dirPath, os.ModePerm) if err != nil { return err } } return nil } func generateTemplate(templateText string, templateData interface{}) ([]byte, error) { t, err := template.New("sqlBuilderTableTemplate").Funcs(template.FuncMap{ "camelize": func(txt string) string { return snaker.SnakeToCamel(strings.Replace(txt, "-", "_", -1)) }, "now": func() string { return time.Now().Format(time.RFC850) }, }).Parse(templateText) if err != nil { return nil, err } var buf bytes.Buffer if err := t.Execute(&buf, templateData); err != nil { return nil, err } return buf.Bytes(), nil } func cleanUpGeneratedFiles(dir string) error { exist, err := dirExists(dir) if err != nil { return err } if exist { err := os.RemoveAll(dir) if err != nil { return err } } return nil } func dirExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return true, err }