github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/configs/provider_meta.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: MPL-2.0
     3  
     4  package configs
     5  
     6  import "github.com/hashicorp/hcl/v2"
     7  
     8  // ProviderMeta represents a "provider_meta" block inside a "terraform" block
     9  // in a module or file.
    10  type ProviderMeta struct {
    11  	Provider string
    12  	Config   hcl.Body
    13  
    14  	ProviderRange hcl.Range
    15  	DeclRange     hcl.Range
    16  }
    17  
    18  func decodeProviderMetaBlock(block *hcl.Block) (*ProviderMeta, hcl.Diagnostics) {
    19  	// provider_meta must be a static map. We can verify this by attempting to
    20  	// evaluate the values.
    21  	attrs, diags := block.Body.JustAttributes()
    22  	if diags.HasErrors() {
    23  		return nil, diags
    24  	}
    25  
    26  	for _, attr := range attrs {
    27  		_, d := attr.Expr.Value(nil)
    28  		diags = append(diags, d...)
    29  	}
    30  
    31  	// verify that the local name is already localized or produce an error.
    32  	diags = append(diags, checkProviderNameNormalized(block.Labels[0], block.DefRange)...)
    33  
    34  	return &ProviderMeta{
    35  		Provider:      block.Labels[0],
    36  		ProviderRange: block.LabelRanges[0],
    37  		Config:        block.Body,
    38  		DeclRange:     block.DefRange,
    39  	}, diags
    40  }