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  }