-
Notifications
You must be signed in to change notification settings - Fork 0
/
generator.go
48 lines (38 loc) · 917 Bytes
/
generator.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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package api
import (
"io"
"text/template"
)
type Generator interface {
GetImports() []string
WriteConst(wr io.Writer) error
WriteInitFunc(wr io.Writer) error
WriteBody(wr io.Writer) error
}
type BaseGenerator[T any] struct {
Tmpl *template.Template
DataList []*T
}
func (bg *BaseGenerator[T]) GetImports() []string {
return nil
}
func (bg *BaseGenerator[T]) ExecuteTemplate(wr io.Writer, name string) error {
tmpl := bg.Tmpl.Lookup(name)
if tmpl != nil {
for _, data := range bg.DataList {
if err := tmpl.Execute(wr, data); err != nil {
return err
}
}
}
return nil
}
func (bg *BaseGenerator[T]) WriteConst(wr io.Writer) error {
return bg.ExecuteTemplate(wr, "const")
}
func (bg *BaseGenerator[T]) WriteInitFunc(wr io.Writer) error {
return bg.ExecuteTemplate(wr, "init")
}
func (bg *BaseGenerator[T]) WriteBody(wr io.Writer) error {
return bg.ExecuteTemplate(wr, "body")
}