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  }