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 }