| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| package stackaddrs | |
| import ( | |
| "github.com/hashicorp/terraform/internal/addrs" | |
| "github.com/hashicorp/terraform/internal/collections" | |
| ) | |
| // StackCall represents a call to an embedded stack. This is essentially the | |
| // address of a "stack" block in the configuration, before it's been fully | |
| // expanded into zero or more instances. | |
| type StackCall struct { | |
| Name string | |
| } | |
| func (StackCall) referenceableSigil() {} | |
| func (StackCall) inStackConfigSigil() {} | |
| func (StackCall) inStackInstanceSigil() {} | |
| func (c StackCall) String() string { | |
| return "stack." + c.Name | |
| } | |
| func (c StackCall) UniqueKey() collections.UniqueKey[StackCall] { | |
| return stackCallUniqueKey(c.String()) | |
| } | |
| type stackCallUniqueKey string | |
| // IsUniqueKey implements collections.UniqueKey. | |
| func (stackCallUniqueKey) IsUniqueKey(StackCall) {} | |
| // ConfigStackCall represents a static stack call inside a particular [Stack]. | |
| type ConfigStackCall = InStackConfig[StackCall] | |
| // AbsStackCall represents an instance of a stack call inside a particular | |
| // [StackInstance[. | |
| type AbsStackCall = InStackInstance[StackCall] | |
| func AbsStackCallInstance(call AbsStackCall, key addrs.InstanceKey) StackInstance { | |
| ret := make(StackInstance, len(call.Stack), len(call.Stack)+1) | |
| copy(ret, call.Stack) | |
| return append(ret, StackInstanceStep{ | |
| Name: call.Item.Name, | |
| Key: key, | |
| }) | |
| } |