/
group_interface_go.go
99 lines (83 loc) · 2.26 KB
/
group_interface_go.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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package generators
import (
"fmt"
"io"
args2 "github.com/rancher/wrangler/v2/pkg/controller-gen/args"
"k8s.io/gengo/args"
"k8s.io/gengo/generator"
"k8s.io/gengo/namer"
)
func GroupInterfaceGo(group string, args *args.GeneratorArgs, customArgs *args2.CustomArgs) generator.Generator {
return &interfaceGo{
group: group,
args: args,
customArgs: customArgs,
DefaultGen: generator.DefaultGen{
OptionalName: "interface",
OptionalBody: []byte(interfaceBody),
},
}
}
type interfaceGo struct {
generator.DefaultGen
group string
args *args.GeneratorArgs
customArgs *args2.CustomArgs
}
func (f *interfaceGo) Imports(context *generator.Context) []string {
packages := Imports
for gv := range f.customArgs.TypesByGroup {
if gv.Group != f.group {
continue
}
pkg := f.customArgs.ImportPackage
if pkg == "" {
pkg = f.customArgs.Package
}
packages = append(packages, fmt.Sprintf("%s \"%s/controllers/%s/%s\"", gv.Version, pkg,
groupPackageName(gv.Group, f.customArgs.Options.Groups[gv.Group].OutputControllerPackageName), gv.Version))
}
return packages
}
func (f *interfaceGo) Init(c *generator.Context, w io.Writer) error {
sw := generator.NewSnippetWriter(w, c, "{{", "}}")
sw.Do("type Interface interface {\n", nil)
for gv := range f.customArgs.TypesByGroup {
if gv.Group != f.group {
continue
}
sw.Do("{{.upperVersion}}() {{.version}}.Interface\n", map[string]interface{}{
"upperVersion": namer.IC(gv.Version),
"version": gv.Version,
})
}
sw.Do("}\n", nil)
if err := f.DefaultGen.Init(c, w); err != nil {
return err
}
for gv := range f.customArgs.TypesByGroup {
if gv.Group != f.group {
continue
}
m := map[string]interface{}{
"upperGroup": upperLowercase(f.group),
"upperVersion": namer.IC(gv.Version),
"version": gv.Version,
}
sw.Do("\nfunc (g *group) {{.upperVersion}}() {{.version}}.Interface {\n", m)
sw.Do("return {{.version}}.New(g.controllerFactory)\n", m)
sw.Do("}\n", m)
}
return sw.Error()
}
var interfaceBody = `
type group struct {
controllerFactory controller.SharedControllerFactory
}
// New returns a new Interface.
func New(controllerFactory controller.SharedControllerFactory) Interface {
return &group{
controllerFactory: controllerFactory,
}
}
`