diff --git a/pkg/codegen/assets/type_labels.gen.go.tpl b/pkg/codegen/assets/type_labels.gen.go.tpl new file mode 100644 index 000000000..c0970a281 --- /dev/null +++ b/pkg/codegen/assets/type_labels.gen.go.tpl @@ -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 }} diff --git a/pkg/codegen/types.go b/pkg/codegen/types.go index 9099ec7f2..57600a5c9 100644 --- a/pkg/codegen/types.go +++ b/pkg/codegen/types.go @@ -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 +}