blob: d77aab60b39f8d4c5cad2e05b5a2ba8a59c39221 [file] [log] [blame] [edit]
// Copyright (c) HashiCorp, Inc.
// 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,
})
}