// Copyright IBM Corp. 2014, 2026 // SPDX-License-Identifier: BUSL-1.1 package stackconfig import ( "github.com/hashicorp/hcl/v2" "github.com/hashicorp/hcl/v2/hclsyntax" "github.com/hashicorp/terraform/internal/tfdiags" ) // LocalValue is a declaration of a private local value within a particular // stack configuration. These are visible only within the scope of a particular // [Stack]. type LocalValue struct { Name string Value hcl.Expression DeclRange tfdiags.SourceRange } func decodeLocalValuesBlock(block *hcl.Block) ([]*LocalValue, tfdiags.Diagnostics) { var diags tfdiags.Diagnostics attrs, hclDiags := block.Body.JustAttributes() diags = diags.Append(hclDiags) if len(attrs) == 0 { return nil, diags } ret := make([]*LocalValue, 0, len(attrs)) for name, attr := range attrs { v := &LocalValue{ Name: name, Value: attr.Expr, DeclRange: tfdiags.SourceRangeFromHCL(attr.NameRange), } if !hclsyntax.ValidIdentifier(v.Name) { diags = diags.Append(invalidNameDiagnostic( "Invalid name for local value", attr.NameRange, )) continue } ret = append(ret, v) } return ret, diags }