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  }