kindsys: Return Decl from Kinds (#59075)

* kindsys: Return Decl from Kinds

* Add funcs to extract DeclForGen from kinds
This commit is contained in:
sam boyer 2022-11-21 17:50:06 -05:00 committed by GitHub
parent 57d6adbc7c
commit 6ac43c9cb4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 41 additions and 13 deletions

View File

@ -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 {

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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 {

View File

@ -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"`