diff --git a/pkg/codegen/generators.go b/pkg/codegen/generators.go index a7b7aed83f8..11820333f7a 100644 --- a/pkg/codegen/generators.go +++ b/pkg/codegen/generators.go @@ -29,6 +29,29 @@ func ForGen(rt *thema.Runtime, decl *kindsys.SomeDecl) (*DeclForGen, error) { }, nil } +// RawForGen produces a [DeclForGen] from a [kindsys.Raw] kind. +// +// Useful for grafana-external code generators, which depend on the Kind +// representation in registries produced by grafana core (such as +// ["github.com/grafana/grafana/pkg/registry/corekind".NewBase]). +func RawForGen(k kindsys.Raw) *DeclForGen { + return &DeclForGen{ + SomeDecl: k.Decl().Some(), + } +} + +// StructuredForGen produces a [DeclForGen] from a [kindsys.Structured] kind. +// +// Useful for grafana-external code generators, which depend on the Kind +// representation in registries produced by grafana core (such as +// ["github.com/grafana/grafana/pkg/registry/corekind".NewBase]). +func StructuredForGen(k kindsys.Structured) *DeclForGen { + return &DeclForGen{ + SomeDecl: k.Decl().Some(), + lin: k.Lineage(), + } +} + // DeclForGen wraps [kindsys.SomeDecl] to provide trivial caching of // the lineage declared by the kind (nil for raw kinds). type DeclForGen struct { diff --git a/pkg/codegen/tmpl/kind_corestructured.tmpl b/pkg/codegen/tmpl/kind_corestructured.tmpl index 71fbac06074..a02a686b687 100644 --- a/pkg/codegen/tmpl/kind_corestructured.tmpl +++ b/pkg/codegen/tmpl/kind_corestructured.tmpl @@ -90,6 +90,7 @@ func (k *Kind) Maturity() kindsys.Maturity { } // TODO standard generated docs -func (k *Kind) Meta() kindsys.CoreStructuredMeta { - return k.decl.Meta +func (k *Kind) Decl() *kindsys.Decl[kindsys.CoreStructuredMeta] { + d := k.decl + return &d } diff --git a/pkg/codegen/tmpl/kind_raw.tmpl b/pkg/codegen/tmpl/kind_raw.tmpl index 479915c124e..a38070c67e3 100644 --- a/pkg/codegen/tmpl/kind_raw.tmpl +++ b/pkg/codegen/tmpl/kind_raw.tmpl @@ -42,6 +42,7 @@ func (k *Kind) Maturity() kindsys.Maturity { } // TODO standard generated docs -func (k *Kind) Meta() kindsys.RawMeta { - return k.decl.Meta +func (k *Kind) Decl() *kindsys.Decl[kindsys.RawMeta] { + d := k.decl + return &d } diff --git a/pkg/kinds/dashboard/dashboard_kind_gen.go b/pkg/kinds/dashboard/dashboard_kind_gen.go index ee275dc8426..71c47986121 100644 --- a/pkg/kinds/dashboard/dashboard_kind_gen.go +++ b/pkg/kinds/dashboard/dashboard_kind_gen.go @@ -99,6 +99,7 @@ func (k *Kind) Maturity() kindsys.Maturity { } // TODO standard generated docs -func (k *Kind) Meta() kindsys.CoreStructuredMeta { - return k.decl.Meta +func (k *Kind) Decl() *kindsys.Decl[kindsys.CoreStructuredMeta] { + d := k.decl + return &d } diff --git a/pkg/kinds/playlist/playlist_kind_gen.go b/pkg/kinds/playlist/playlist_kind_gen.go index eb82358c7bb..e67a4bc3dc2 100644 --- a/pkg/kinds/playlist/playlist_kind_gen.go +++ b/pkg/kinds/playlist/playlist_kind_gen.go @@ -99,6 +99,7 @@ func (k *Kind) Maturity() kindsys.Maturity { } // TODO standard generated docs -func (k *Kind) Meta() kindsys.CoreStructuredMeta { - return k.decl.Meta +func (k *Kind) Decl() *kindsys.Decl[kindsys.CoreStructuredMeta] { + d := k.decl + return &d } diff --git a/pkg/kinds/svg/svg_kind_gen.go b/pkg/kinds/svg/svg_kind_gen.go index 9722d91998b..b3f6a4f3150 100644 --- a/pkg/kinds/svg/svg_kind_gen.go +++ b/pkg/kinds/svg/svg_kind_gen.go @@ -49,6 +49,7 @@ func (k *Kind) Maturity() kindsys.Maturity { } // TODO standard generated docs -func (k *Kind) Meta() kindsys.RawMeta { - return k.decl.Meta +func (k *Kind) Decl() *kindsys.Decl[kindsys.RawMeta] { + d := k.decl + return &d } diff --git a/pkg/kindsys/kind.go b/pkg/kindsys/kind.go index ea02870ce26..9839954fb69 100644 --- a/pkg/kindsys/kind.go +++ b/pkg/kindsys/kind.go @@ -58,7 +58,7 @@ type Raw interface { Interface // TODO docs - Meta() RawMeta + Decl() *Decl[RawMeta] } type Structured interface { @@ -68,7 +68,7 @@ type Structured interface { Lineage() thema.Lineage // TODO docs - Meta() CoreStructuredMeta // TODO figure out how to reconcile this interface with CustomStructuredMeta + Decl() *Decl[CoreStructuredMeta] // TODO figure out how to reconcile this interface with CustomStructuredMeta } // type Composable interface { diff --git a/pkg/kindsys/kindmetas.go b/pkg/kindsys/kindmetas.go index 946c07fbe76..5470d8e26d6 100644 --- a/pkg/kindsys/kindmetas.go +++ b/pkg/kindsys/kindmetas.go @@ -2,7 +2,7 @@ package kindsys import "github.com/grafana/thema" -// CommonMeta contains the kind metadata common to all categories of kinds. +// CommonMeta contains the metadata common to all categories of kinds. type CommonMeta struct { Name string `json:"name"` PluralName string `json:"pluralName"`