github.com/joomcode/cue@v0.4.4-0.20221111115225-539fe3512047/pkg/joom/cuetools/context.go (about) 1 package cuetools 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/joomcode/cue/cue/ast" 8 "github.com/joomcode/cue/cue/cuecontext" 9 "github.com/joomcode/cue/cue/parser" 10 "github.com/pkg/errors" 11 ) 12 13 type ConfigContext struct { 14 EnvType string 15 Cluster string 16 DevEnvName string 17 CueFile string 18 } 19 20 func (cc *ConfigContext) toString() string { 21 return fmt.Sprintf(` 22 #Env: "%s" 23 #Cluster: "%s" 24 #DevEnvName: "%s" 25 `, cc.EnvType, cc.Cluster, cc.DevEnvName) 26 } 27 28 func (cc *ConfigContext) buildCueConfigContext(templatePath string) (*ast.File, error) { 29 incompleteContextBytes, err := os.ReadFile(templatePath) 30 if err != nil { 31 return nil, err 32 } 33 34 params := cc.toString() 35 f, parseError := parser.ParseFile(templatePath, string(incompleteContextBytes)+params) 36 if parseError != nil { 37 return nil, errors.Wrap(parseError, params) 38 } 39 40 // test parameters validity 41 if err = cuecontext.New().BuildFile(f).Validate(); err != nil { 42 return nil, errors.Wrap(CueErrorDetails(err), params) 43 } 44 return f, nil 45 } 46 47 func (cc *ConfigContext) contextAugmentingParser(name string, src interface{}) (*ast.File, error) { 48 if name == "../config/internal/context/context.cue" { 49 return cc.buildCueConfigContext(name) 50 } 51 return parser.ParseFile(name, src) 52 }