Kindsys: Remove defs, Slot->SchemaInterface (#61069)
* kindsys: Remove defs, Slot->SchemaInterface * Remove excess file * Fix up tests * Regenerate kinds report * Final bits of cleanup * Stop complaining, linter * Update pkg/kindsys/kindcat_composable.cue Co-authored-by: Tania <yalyna.ts@gmail.com> Co-authored-by: Tania <yalyna.ts@gmail.com>
This commit is contained in:
+28
-24
@@ -60,11 +60,11 @@ func doLoadFrameworkCUE(ctx *cue.Context) (cue.Value, error) {
|
||||
//
|
||||
// For low-level use in constructing other types and APIs, while still letting
|
||||
// us declare all the frameworky CUE bits in a single package. Other Go types
|
||||
// make the constructs in this value easy to use.
|
||||
// make the constructs in the returned cue.Value easy to use.
|
||||
//
|
||||
// All calling code within grafana/grafana is expected to use Grafana's
|
||||
// singleton [cue.Context], returned from [cuectx.GrafanaCUEContext]. If nil
|
||||
// is passed, the singleton will be used.
|
||||
// Calling this with a nil [cue.Context] (the singleton returned from
|
||||
// [cuectx.GrafanaCUEContext] is used) will memoize certain CUE operations.
|
||||
// Prefer passing nil unless a different cue.Context is specifically required.
|
||||
func CUEFramework(ctx *cue.Context) cue.Value {
|
||||
if ctx == nil || ctx == cuectx.GrafanaCUEContext() {
|
||||
// Ensure framework is loaded, even if this func is called
|
||||
@@ -77,9 +77,9 @@ func CUEFramework(ctx *cue.Context) cue.Value {
|
||||
return v
|
||||
}
|
||||
|
||||
// ToKindMeta takes a cue.Value expected to represent a kind of the category
|
||||
// ToKindProps takes a cue.Value expected to represent a kind of the category
|
||||
// specified by the type parameter and populates the Go type from the cue.Value.
|
||||
func ToKindMeta[T KindProperties](v cue.Value) (T, error) {
|
||||
func ToKindProps[T KindProperties](v cue.Value) (T, error) {
|
||||
props := new(T)
|
||||
if !v.Exists() {
|
||||
return *props, ErrValueNotExist
|
||||
@@ -91,11 +91,11 @@ func ToKindMeta[T KindProperties](v cue.Value) (T, error) {
|
||||
anyprops := any(*props).(SomeKindProperties)
|
||||
switch anyprops.(type) {
|
||||
case CoreProperties:
|
||||
kdef = fw.LookupPath(cue.MakePath(cue.Def("Core")))
|
||||
kdef = fw.LookupPath(cue.MakePath(cue.Str("Core")))
|
||||
case CustomProperties:
|
||||
kdef = fw.LookupPath(cue.MakePath(cue.Def("Custom")))
|
||||
kdef = fw.LookupPath(cue.MakePath(cue.Str("Custom")))
|
||||
case ComposableProperties:
|
||||
kdef = fw.LookupPath(cue.MakePath(cue.Def("Composable")))
|
||||
kdef = fw.LookupPath(cue.MakePath(cue.Str("Composable")))
|
||||
default:
|
||||
// unreachable so long as all the possibilities in KindProperties have switch branches
|
||||
panic("unreachable")
|
||||
@@ -128,8 +128,9 @@ type SomeDecl struct {
|
||||
// BindKindLineage binds the lineage for the kind declaration.
|
||||
//
|
||||
// For kinds with a corresponding Go type, it is left to the caller to associate
|
||||
// that Go type with the lineage returned from this function by a call to [thema.BindType].
|
||||
func (decl *SomeDecl) BindKindLineage(rt *thema.Runtime, opts ...thema.BindOption) (thema.Lineage, error) {
|
||||
// that Go type with the lineage returned from this function by a call to
|
||||
// [thema.BindType].
|
||||
func (decl SomeDecl) BindKindLineage(rt *thema.Runtime, opts ...thema.BindOption) (thema.Lineage, error) {
|
||||
if rt == nil {
|
||||
rt = cuectx.GrafanaThemaRuntime()
|
||||
}
|
||||
@@ -142,19 +143,19 @@ func (decl *SomeDecl) BindKindLineage(rt *thema.Runtime, opts ...thema.BindOptio
|
||||
}
|
||||
|
||||
// IsCore indicates whether the represented kind is a core kind.
|
||||
func (decl *SomeDecl) IsCore() bool {
|
||||
func (decl SomeDecl) IsCore() bool {
|
||||
_, is := decl.Properties.(CoreProperties)
|
||||
return is
|
||||
}
|
||||
|
||||
// IsCustom indicates whether the represented kind is a custom kind.
|
||||
func (decl *SomeDecl) IsCustom() bool {
|
||||
func (decl SomeDecl) IsCustom() bool {
|
||||
_, is := decl.Properties.(CustomProperties)
|
||||
return is
|
||||
}
|
||||
|
||||
// IsComposable indicates whether the represented kind is a composable kind.
|
||||
func (decl *SomeDecl) IsComposable() bool {
|
||||
func (decl SomeDecl) IsComposable() bool {
|
||||
_, is := decl.Properties.(ComposableProperties)
|
||||
return is
|
||||
}
|
||||
@@ -171,8 +172,8 @@ type Decl[T KindProperties] struct {
|
||||
}
|
||||
|
||||
// Some converts the typed Decl to the equivalent typeless SomeDecl.
|
||||
func (decl *Decl[T]) Some() *SomeDecl {
|
||||
return &SomeDecl{
|
||||
func (decl Decl[T]) Some() SomeDecl {
|
||||
return SomeDecl{
|
||||
V: decl.V,
|
||||
Properties: any(decl.Properties).(SomeKindProperties),
|
||||
}
|
||||
@@ -195,17 +196,20 @@ func (decl *Decl[T]) Some() *SomeDecl {
|
||||
// This is a low-level function, primarily intended for use in code generation.
|
||||
// For representations of core kinds that are useful in Go programs at runtime,
|
||||
// see ["github.com/grafana/grafana/pkg/registry/corekind"].
|
||||
func LoadCoreKind(declpath string, ctx *cue.Context, overlay fs.FS) (*Decl[CoreProperties], error) {
|
||||
func LoadCoreKind(declpath string, ctx *cue.Context, overlay fs.FS) (Decl[CoreProperties], error) {
|
||||
none := Decl[CoreProperties]{}
|
||||
vk, err := cuectx.BuildGrafanaInstance(ctx, declpath, "kind", overlay)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return none, err
|
||||
}
|
||||
decl := &Decl[CoreProperties]{
|
||||
V: vk,
|
||||
}
|
||||
decl.Properties, err = ToKindMeta[CoreProperties](vk)
|
||||
|
||||
props, err := ToKindProps[CoreProperties](vk)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return none, err
|
||||
}
|
||||
return decl, nil
|
||||
|
||||
return Decl[CoreProperties]{
|
||||
V: vk,
|
||||
Properties: props,
|
||||
}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user