github.com/codykaup/genqlient@v0.6.2/generate/template.go (about) 1 package generate 2 3 import ( 4 "embed" 5 "io" 6 "strings" 7 "text/template" 8 ) 9 10 //go:embed *.tmpl 11 var templates embed.FS 12 13 func repeat(n int, s string) string { 14 var builder strings.Builder 15 for i := 0; i < n; i++ { 16 builder.WriteString(s) 17 } 18 return builder.String() 19 } 20 21 func intRange(n int) []int { 22 ret := make([]int, n) 23 for i := 0; i < n; i++ { 24 ret[i] = i 25 } 26 return ret 27 } 28 29 func sub(x, y int) int { return x - y } 30 31 // render executes the given template with the funcs from this generator. 32 func (g *generator) render(tmplRelFilename string, w io.Writer, data interface{}) error { 33 tmpl := g.templateCache[tmplRelFilename] 34 if tmpl == nil { 35 funcMap := template.FuncMap{ 36 "ref": g.ref, 37 "repeat": repeat, 38 "intRange": intRange, 39 "sub": sub, 40 } 41 var err error 42 tmpl, err = template.New(tmplRelFilename).Funcs(funcMap).ParseFS(templates, tmplRelFilename) 43 if err != nil { 44 return errorf(nil, "could not load template %v: %v", tmplRelFilename, err) 45 } 46 g.templateCache[tmplRelFilename] = tmpl 47 } 48 err := tmpl.Execute(w, data) 49 if err != nil { 50 return errorf(nil, "could not render template: %v", err) 51 } 52 return nil 53 }