github.com/zkry/enry@v1.6.3/internal/code-generator/generator/types.go (about) 1 package generator 2 3 import ( 4 "bytes" 5 "io" 6 "io/ioutil" 7 "text/template" 8 9 yaml "gopkg.in/yaml.v2" 10 ) 11 12 var typeToTypeConst = map[string]int{ 13 "data": 1, 14 "programming": 2, 15 "markup": 3, 16 "prose": 4, 17 } 18 19 // Types reads from fileToParse and builds source file from tmplPath. It complies with type File signature. 20 func Types(fileToParse, samplesDir, outPath, tmplPath, tmplName, commit string) error { 21 data, err := ioutil.ReadFile(fileToParse) 22 if err != nil { 23 return err 24 } 25 26 languages := make(map[string]*languageInfo) 27 if err := yaml.Unmarshal(data, &languages); err != nil { 28 return err 29 } 30 31 langTypeMap := buildLanguageTypeMap(languages) 32 33 buf := &bytes.Buffer{} 34 if err := executeTypesTemplate(buf, langTypeMap, tmplPath, tmplName, commit); err != nil { 35 return err 36 } 37 38 return formatedWrite(outPath, buf.Bytes()) 39 } 40 41 func buildLanguageTypeMap(languages map[string]*languageInfo) map[string]int { 42 langTypeMap := make(map[string]int) 43 for lang, info := range languages { 44 langTypeMap[lang] = typeToTypeConst[info.Type] 45 } 46 47 return langTypeMap 48 } 49 50 func executeTypesTemplate(out io.Writer, langTypeMap map[string]int, tmplPath, tmplName, commit string) error { 51 fmap := template.FuncMap{ 52 "getCommit": func() string { return commit }, 53 } 54 55 t := template.Must(template.New(tmplName).Funcs(fmap).ParseFiles(tmplPath)) 56 if err := t.Execute(out, langTypeMap); err != nil { 57 return err 58 } 59 60 return nil 61 }