github.com/eliastor/durgaform@v0.0.0-20220816172711-d0ab2d17673e/internal/configs/parser_values.go (about)

     1  package configs
     2  
     3  import (
     4  	"github.com/hashicorp/hcl/v2"
     5  	"github.com/zclconf/go-cty/cty"
     6  )
     7  
     8  // LoadValuesFile reads the file at the given path and parses it as a "values
     9  // file", which is an HCL config file whose top-level attributes are treated
    10  // as arbitrary key.value pairs.
    11  //
    12  // If the file cannot be read -- for example, if it does not exist -- then
    13  // a nil map will be returned along with error diagnostics. Callers may wish
    14  // to disregard the returned diagnostics in this case and instead generate
    15  // their own error message(s) with additional context.
    16  //
    17  // If the returned diagnostics has errors when a non-nil map is returned
    18  // then the map may be incomplete but should be valid enough for careful
    19  // static analysis.
    20  //
    21  // This method wraps LoadHCLFile, and so it inherits the syntax selection
    22  // behaviors documented for that method.
    23  func (p *Parser) LoadValuesFile(path string) (map[string]cty.Value, hcl.Diagnostics) {
    24  	body, diags := p.LoadHCLFile(path)
    25  	if body == nil {
    26  		return nil, diags
    27  	}
    28  
    29  	vals := make(map[string]cty.Value)
    30  	attrs, attrDiags := body.JustAttributes()
    31  	diags = append(diags, attrDiags...)
    32  	if attrs == nil {
    33  		return vals, diags
    34  	}
    35  
    36  	for name, attr := range attrs {
    37  		val, valDiags := attr.Expr.Value(nil)
    38  		diags = append(diags, valDiags...)
    39  		vals[name] = val
    40  	}
    41  
    42  	return vals, diags
    43  }