github.com/joomcode/cue@v0.4.4-0.20221111115225-539fe3512047/pkg/joom/cuetools/load.go (about) 1 package cuetools 2 3 import ( 4 "fmt" 5 6 "github.com/joomcode/cue/cue" 7 "github.com/joomcode/cue/cue/cuecontext" 8 "github.com/joomcode/cue/cue/load" 9 ) 10 11 const ( 12 configRootPath = "../config" 13 configPackageName = "mongoscfg" 14 ) 15 16 func LoadConfig(configPath string, configCtx ConfigContext, validate bool, starlarkLibraryPath string) (*cue.Value, error) { 17 loadedConfigs := []string{configPath} 18 loadConfig := &load.Config{ 19 ModuleRoot: configRootPath, 20 Dir: configRootPath, 21 Package: configPackageName, 22 ParseFile: configCtx.contextAugmentingParser, 23 StarlarkCodePath: starlarkLibraryPath, 24 } 25 buildInstances := load.Instances(loadedConfigs, loadConfig) 26 cfgInstance := buildInstances[0] 27 if cfgInstance.Err != nil { 28 return nil, fmt.Errorf("error during load: %v", CueErrorDetails(cfgInstance.Err)) 29 } 30 31 config := cuecontext.New().BuildInstance(cfgInstance) 32 if validate { 33 if err := ValidateCueValue(config); err != nil { 34 return nil, err 35 } 36 } 37 return &config, nil 38 } 39 40 func ValidateCueValue(value cue.Value) error { 41 if value.Err() != nil { 42 return fmt.Errorf("error during build: %v", CueErrorDetails(value.Err())) 43 } else if err := value.Validate(cue.Concrete(true)); err != nil { 44 return fmt.Errorf("error during validate: %v", CueErrorDetails(err)) 45 } 46 return nil 47 }