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 }