github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/addrs/input_variable.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package addrs 5 6 import ( 7 "fmt" 8 ) 9 10 // InputVariable is the address of an input variable. 11 type InputVariable struct { 12 referenceable 13 Name string 14 } 15 16 func (v InputVariable) String() string { 17 return "var." + v.Name 18 } 19 20 func (v InputVariable) UniqueKey() UniqueKey { 21 return v // A InputVariable is its own UniqueKey 22 } 23 24 func (v InputVariable) uniqueKeySigil() {} 25 26 // Absolute converts the receiver into an absolute address within the given 27 // module instance. 28 func (v InputVariable) Absolute(m ModuleInstance) AbsInputVariableInstance { 29 return AbsInputVariableInstance{ 30 Module: m, 31 Variable: v, 32 } 33 } 34 35 func (v InputVariable) InModule(module Module) ConfigInputVariable { 36 return ConfigInputVariable{ 37 Module: module, 38 Variable: v, 39 } 40 } 41 42 // AbsInputVariableInstance is the address of an input variable within a 43 // particular module instance. 44 type AbsInputVariableInstance struct { 45 Module ModuleInstance 46 Variable InputVariable 47 } 48 49 var _ Checkable = AbsInputVariableInstance{} 50 51 // InputVariable returns the absolute address of the input variable of the 52 // given name inside the receiving module instance. 53 func (m ModuleInstance) InputVariable(name string) AbsInputVariableInstance { 54 return AbsInputVariableInstance{ 55 Module: m, 56 Variable: InputVariable{ 57 Name: name, 58 }, 59 } 60 } 61 62 func (v AbsInputVariableInstance) String() string { 63 if len(v.Module) == 0 { 64 return v.Variable.String() 65 } 66 67 return fmt.Sprintf("%s.%s", v.Module.String(), v.Variable.String()) 68 } 69 70 func (v AbsInputVariableInstance) UniqueKey() UniqueKey { 71 return absInputVariableInstanceUniqueKey(v.String()) 72 } 73 74 func (v AbsInputVariableInstance) checkableSigil() {} 75 76 func (v AbsInputVariableInstance) CheckRule(typ CheckRuleType, i int) CheckRule { 77 return CheckRule{ 78 Container: v, 79 Type: typ, 80 Index: i, 81 } 82 } 83 84 func (v AbsInputVariableInstance) ConfigCheckable() ConfigCheckable { 85 return ConfigInputVariable{ 86 Module: v.Module.Module(), 87 Variable: v.Variable, 88 } 89 } 90 91 func (v AbsInputVariableInstance) CheckableKind() CheckableKind { 92 return CheckableInputVariable 93 } 94 95 type ConfigInputVariable struct { 96 Module Module 97 Variable InputVariable 98 } 99 100 var _ ConfigCheckable = ConfigInputVariable{} 101 102 func (v ConfigInputVariable) UniqueKey() UniqueKey { 103 return configInputVariableUniqueKey(v.String()) 104 } 105 106 func (v ConfigInputVariable) configCheckableSigil() {} 107 108 func (v ConfigInputVariable) CheckableKind() CheckableKind { 109 return CheckableInputVariable 110 } 111 112 func (v ConfigInputVariable) String() string { 113 if len(v.Module) == 0 { 114 return v.Variable.String() 115 } 116 117 return fmt.Sprintf("%s.%s", v.Module.String(), v.Variable.String()) 118 } 119 120 type configInputVariableUniqueKey string 121 122 func (k configInputVariableUniqueKey) uniqueKeySigil() {} 123 124 type absInputVariableInstanceUniqueKey string 125 126 func (k absInputVariableInstanceUniqueKey) uniqueKeySigil() {}