resource/types/types.go (72 lines of code) (raw):
package types
import "fmt"
type PropertyDependencyMapping struct {
IsKey bool
ValuePath string
LiteralValue string
Reference *Reference
}
type Reference struct {
Label string // e.g. "test"
Kind string // e.g. "data", "resource", "var"
Name string // e.g. "azurerm_resource_group", "azapi_resource"
Property string // e.g. "id", "name"
}
func (r Reference) String() string {
if r.Kind == "resource" {
return fmt.Sprintf("%s.%s.%s", r.Name, r.Label, r.Property)
}
return fmt.Sprintf("%s.%s.%s.%s", r.Kind, r.Name, r.Label, r.Property)
}
func (r *Reference) IsKnown() bool {
return r != nil && r.Kind != "" && r.Label != "" && r.Name != "" && r.Property != ""
}
type Value interface {
String() string
DeepCopy() Value
}
type RawValue struct {
Raw string
}
func (v RawValue) String() string {
return v.Raw
}
func (v RawValue) DeepCopy() Value {
return NewRawValue(v.Raw)
}
func NewRawValue(raw string) RawValue {
return RawValue{
Raw: raw,
}
}
type ReferenceValue struct {
Reference string
}
func (v ReferenceValue) String() string {
return v.Reference
}
func (v ReferenceValue) DeepCopy() Value {
return NewReferenceValue(v.Reference)
}
func NewReferenceValue(reference string) ReferenceValue {
return ReferenceValue{
Reference: reference,
}
}
type StringLiteralValue struct {
Literal string
}
func (v StringLiteralValue) String() string {
return fmt.Sprintf(`"%s"`, v.Literal)
}
func (v StringLiteralValue) DeepCopy() Value {
return NewStringLiteralValue(v.Literal)
}
func NewStringLiteralValue(literal string) StringLiteralValue {
return StringLiteralValue{
Literal: literal,
}
}
var _ Value = &RawValue{}
var _ Value = &ReferenceValue{}
var _ Value = &StringLiteralValue{}