github.com/joomcode/cue@v0.4.4-0.20221111115225-539fe3512047/pkg/joom/joom.go (about)

     1  package joom
     2  
     3  import (
     4  	"fmt"
     5  
     6  	cueerrors "github.com/joomcode/cue/cue/errors"
     7  	"github.com/joomcode/cue/pkg/internal"
     8  	"github.com/joomcode/cue/pkg/joom/devenv"
     9  	alauda "github.com/joomcode/cue/pkg/joom/starlark"
    10  
    11  	"github.com/joomcode/cue/cue"
    12  )
    13  
    14  func ListClusters(maxCount int) []string {
    15  	return devenv.NewDefaultDevEnvClient().ListDevClusters(maxCount)
    16  }
    17  
    18  func DescribeCluster(env string, name string) *devenv.ClusterInfo {
    19  	return devenv.NewDefaultDevEnvClient().DescribeCluster(env, name)
    20  }
    21  
    22  func Starlark(c *internal.CallCtxt, schema cue.Value, in cue.Value) cue.Value {
    23  	r := c.Registry()
    24  	funcName := schema.LookupPath(cue.ParsePath("$star"))
    25  	if !funcName.Exists() {
    26  		fmt.Printf("No function name found in schema for %s\n", schema)
    27  		return cue.Value{}
    28  	}
    29  	fn, err := funcName.String()
    30  	if err != nil {
    31  		fmt.Printf("Unable to convert %s to string\n", funcName)
    32  		return cue.Value{}
    33  	}
    34  	f, _ := r.Function(fn)
    35  	rt := c.Runtime()
    36  	// todo handle errors in cue way
    37  	//	x = mkErr(v.idx, n, adt.EvalError, "field not found: %v", sel.sel)
    38  	//	if n.Accept(ctx, f) {
    39  	//		x.Code = adt.IncompleteError
    40  	//	}
    41  	//	x.NotExists = true
    42  	//
    43  	//	v := makeValue(v.idx, n, parent)
    44  	//	return newErrValue(v, x)
    45  	inputSchema := schema.LookupPath(cue.ParsePath("in"))
    46  	if !inputSchema.Exists() {
    47  		fmt.Printf("No input schema found in %s\n", schema)
    48  		return cue.Value{}
    49  	}
    50  	outputSchema := schema.LookupPath(cue.ParsePath("out"))
    51  	if !outputSchema.Exists() {
    52  		fmt.Printf("No output schema found in %s\n", schema)
    53  		return cue.Value{}
    54  	}
    55  	if err := inputSchema.Unify(in).Validate(); err != nil {
    56  		fmt.Println(fmt.Errorf(cueerrors.Details(err, nil)))
    57  		return cue.Value{}
    58  	}
    59  	result, err := alauda.Run(in, f, rt)
    60  	if err != nil {
    61  		fmt.Println(fmt.Errorf(cueerrors.Details(err, nil)))
    62  		return cue.Value{}
    63  	}
    64  	if err := outputSchema.Unify(*result).Validate(); err != nil {
    65  		fmt.Println(fmt.Errorf(cueerrors.Details(err, nil)))
    66  		return cue.Value{}
    67  	}
    68  	return *result
    69  }