forked from parsyl/parquet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
templates.go
33 lines (29 loc) · 1.05 KB
/
templates.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package fields
import (
"log"
"text/template"
)
var (
fieldTpl *template.Template
initTpl *template.Template
)
func init() {
var err error
fieldTpl, err = template.New("field").Parse(`x.{{.Parent}} = {{if .Append}}append(x.{{.Parent}}, {{.Val}}){{else}}{{.Val}}{{end}}`)
if err != nil {
log.Fatal(err)
}
initTpl = template.New("subfield")
for _, t := range []string{
`{{if eq .RT 0}}{{template "required" .}}{{else}}{{if eq .RT 1}}{{template "optional" .}}{{else}}{{template "repeated" .}}{{end}}{{end}}`,
`{{define "required"}}{{if .Primitive}}{{.Val}}{{else}}{{.Type}}{ {{.Val}} }{{end}}{{end}}`,
`{{define "optional"}}{{if .Primitive}}p{{.Type}}({{.Val}}){{else}}&{{.Type}}{ {{.Val}} }{{end}}{{end}}`,
`{{define "repeated"}}{{if .Slice}}{{template "slice" .}}{{else}}{{if .Primitive}}{{.Val}}{{else}}{{.Type}}{ {{.Val}} } {{end}}{{end}}{{end}}`,
`{{define "slice"}}{{if .Primitive}}[]{{.Type}}{ {{.Val}} }{{else}}[]{{.Type}}{ { {{.Val}} } }{{end}}{{end}}`,
} {
initTpl, err = initTpl.Parse(t)
if err != nil {
log.Fatal(err)
}
}
}