forked from kubernetes-csi/csi-proxy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
api_group_generated_gen.go
74 lines (57 loc) · 2 KB
/
api_group_generated_gen.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
package generators
import (
"io"
"sort"
"k8s.io/gengo/generator"
"k8s.io/gengo/types"
"github.com/kubernetes-csi/csi-proxy/client/apiversion"
)
// a apiGroupGeneratedGenerator generates api_group_generated.go files - one per API group.
type apiGroupGeneratedGenerator struct {
generator.DefaultGen
groupDefinition *groupDefinition
}
func (g *apiGroupGeneratedGenerator) Filter(*generator.Context, *types.Type) bool {
return false
}
func (g *apiGroupGeneratedGenerator) Imports(*generator.Context) []string {
imports := []string{
"github.com/kubernetes-csi/csi-proxy/client/apiversion",
"srvtypes \"github.com/kubernetes-csi/csi-proxy/internal/server/types\"",
g.groupDefinition.internalServerPkg(),
}
for _, version := range g.groupDefinition.versions {
imports = append(imports, g.groupDefinition.versionedServerPkg(version.Name))
}
return imports
}
func (g *apiGroupGeneratedGenerator) Init(context *generator.Context, writer io.Writer) error {
snippetWriter := generator.NewSnippetWriter(writer, context, "$", "$")
snippetWriter.Do(`const name = "$.$"`, g.groupDefinition.name)
snippetWriter.Do(`
// ensure the server defines all the required methods
var _ internal.ServerInterface = &Server{}
func (s *Server) VersionedAPIs() []*srvtypes.VersionedAPI {
`, nil)
versions := make([]apiversion.Version, len(g.groupDefinition.versions))
for i, vsn := range g.groupDefinition.versions {
versions[i] = apiversion.NewVersionOrPanic(vsn.Name)
}
sort.Slice(versions, func(i, j int) bool {
return versions[i].Compare(versions[j]) == apiversion.Lesser
})
for _, version := range versions {
snippetWriter.Do("$.$Server := $.$.NewVersionedServer(s)\n", version)
}
snippetWriter.Do("\n\nreturn []*srvtypes.VersionedAPI{\n", nil)
for _, version := range versions {
snippetWriter.Do(`{
Group: name,
Version: apiversion.NewVersionOrPanic("$.$"),
Registrant: $.$Server.Register,
},
`, version.String())
}
snippetWriter.Do("\n}\n}\n", nil)
return snippetWriter.Error()
}