gitlab.com/thomasboni/go-enry/v2@v2.8.3-0.20220418031202-30b0d7a3de98/internal/code-generator/generator/id.go (about) 1 package generator 2 3 import ( 4 "bytes" 5 "io" 6 "io/ioutil" 7 8 yaml "gopkg.in/yaml.v2" 9 ) 10 11 // ID generates a map in Go with language name -> language ID. 12 // It is of generator.File type. 13 func ID(fileToParse, samplesDir, outPath, tmplPath, tmplName, commit string) error { 14 data, err := ioutil.ReadFile(fileToParse) 15 if err != nil { 16 return err 17 } 18 19 languages := make(map[string]*languageInfo) 20 if err := yaml.Unmarshal(data, &languages); err != nil { 21 return err 22 } 23 24 langMimeMap := buildLanguageIDMap(languages) 25 26 buf := &bytes.Buffer{} 27 if err := executeIDTemplate(buf, langMimeMap, tmplPath, tmplName, commit); err != nil { 28 return err 29 } 30 31 return formatedWrite(outPath, buf.Bytes()) 32 } 33 34 func buildLanguageIDMap(languages map[string]*languageInfo) map[string]int { 35 langIDMap := make(map[string]int) 36 for lang, info := range languages { 37 // NOTE: 0 is a valid language ID so checking the zero value would skip one language 38 if info.LanguageID != nil { 39 langIDMap[lang] = *info.LanguageID 40 } 41 } 42 43 return langIDMap 44 } 45 46 func executeIDTemplate(out io.Writer, langIDMap map[string]int, tmplPath, tmplName, commit string) error { 47 return executeTemplate(out, tmplName, tmplPath, commit, nil, langIDMap) 48 }