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  }