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