3
0

Add support for type label codegen

This commit is contained in:
Denis Arh
2020-10-28 16:39:06 +01:00
parent d89cc6e207
commit 8189f40fc0
2 changed files with 63 additions and 1 deletions
+38
View File
@@ -0,0 +1,38 @@
package {{ .Package }}
// This file is auto-generated.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
// Definitions file that controls how this file is generated:
// {{ .Source }}
{{ range $name, $set := .Types }}
{{ if $set.LabelResourceType }}
// SetLabel adds new label to label map
func (m *{{ $name }}) SetLabel(key string, value string) {
if m.Labels == nil {
m.Labels = make(map[string]string)
}
m.Labels[key] = value
}
// GetLabels adds new label to label map
func (m {{ $name }}) GetLabels() map[string]string {
return m.Labels
}
// GetLabels adds new label to label map
func ({{ $name }}) LabelResourceKind() string {
return {{ printf "%q" $set.LabelResourceType }}
}
// GetLabels adds new label to label map
func (m {{ $name }}) LabelResourceID() uint64 {
return m.ID
}
{{ end }}
{{ end }}
+25 -1
View File
@@ -5,6 +5,7 @@ import (
"gopkg.in/yaml.v2"
"os"
"path"
"syscall"
"text/template"
)
@@ -23,7 +24,8 @@ type (
}
typeDef struct {
NoIdField bool `yaml:"noIdField"`
NoIdField bool `yaml:"noIdField"`
LabelResourceType string `yaml:"labelResourceType"`
}
)
@@ -65,6 +67,8 @@ func genTypes(tpl *template.Template, dd ...*typesDef) (err error) {
var (
typeGen = tpl.Lookup("type_set.gen.go.tpl")
typeGenTest = tpl.Lookup("type_set.gen_test.go.tpl")
typeLabelsGen = tpl.Lookup("type_labels.gen.go.tpl")
)
for _, d := range dd {
@@ -79,7 +83,27 @@ func genTypes(tpl *template.Template, dd ...*typesDef) (err error) {
if err != nil {
return
}
labelsOutput := path.Join(d.outputDir, "type_labels.gen.go")
if d.HasLabels() {
err = goTemplate(labelsOutput, typeLabelsGen, d)
} else if err = syscall.Unlink(labelsOutput); os.IsNotExist(err) {
err = nil
}
if err != nil {
return
}
}
return nil
}
func (d typesDef) HasLabels() bool {
for _, t := range d.Types {
if len(t.LabelResourceType) > 0 {
return true
}
}
return false
}