mirror of
https://github.com/hashicorp/terraform.git
synced 2026-02-19 02:39:17 -05:00
49 lines
1.4 KiB
Go
49 lines
1.4 KiB
Go
// 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,
|
|
})
|
|
}
|