github.com/zkry/enry@v1.6.3/internal/code-generator/generator/mimeType.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 func MimeType(fileToParse, samplesDir, outPath, tmplPath, tmplName, commit string) error { 13 data, err := ioutil.ReadFile(fileToParse) 14 if err != nil { 15 return err 16 } 17 18 languages := make(map[string]*languageInfo) 19 if err := yaml.Unmarshal(data, &languages); err != nil { 20 return err 21 } 22 23 langMimeMap := buildLanguageMimeMap(languages) 24 25 buf := &bytes.Buffer{} 26 if err := executeMimeTemplate(buf, langMimeMap, tmplPath, tmplName, commit); err != nil { 27 return err 28 } 29 30 return formatedWrite(outPath, buf.Bytes()) 31 } 32 33 func buildLanguageMimeMap(languages map[string]*languageInfo) map[string]string { 34 langMimeMap := make(map[string]string) 35 for lang, info := range languages { 36 if len(info.MimeType) != 0 { 37 langMimeMap[lang] = info.MimeType 38 } 39 } 40 41 return langMimeMap 42 } 43 44 func executeMimeTemplate(out io.Writer, langMimeMap map[string]string, tmplPath, tmplName, commit string) error { 45 fmap := template.FuncMap{ 46 "getCommit": func() string { return commit }, 47 } 48 49 t := template.Must(template.New(tmplName).Funcs(fmap).ParseFiles(tmplPath)) 50 if err := t.Execute(out, langMimeMap); err != nil { 51 return err 52 } 53 54 return nil 55 }