| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| package addrs | |
| import ( | |
| "fmt" | |
| ) | |
| // InputVariable is the address of an input variable. | |
| type InputVariable struct { | |
| referenceable | |
| Name string | |
| } | |
| func (v InputVariable) String() string { | |
| return "var." + v.Name | |
| } | |
| func (v InputVariable) UniqueKey() UniqueKey { | |
| return v // A InputVariable is its own UniqueKey | |
| } | |
| func (v InputVariable) uniqueKeySigil() {} | |
| // Absolute converts the receiver into an absolute address within the given | |
| // module instance. | |
| func (v InputVariable) Absolute(m ModuleInstance) AbsInputVariableInstance { | |
| return AbsInputVariableInstance{ | |
| Module: m, | |
| Variable: v, | |
| } | |
| } | |
| func (v InputVariable) InModule(module Module) ConfigInputVariable { | |
| return ConfigInputVariable{ | |
| Module: module, | |
| Variable: v, | |
| } | |
| } | |
| // AbsInputVariableInstance is the address of an input variable within a | |
| // particular module instance. | |
| type AbsInputVariableInstance struct { | |
| Module ModuleInstance | |
| Variable InputVariable | |
| } | |
| var _ Checkable = AbsInputVariableInstance{} | |
| // InputVariable returns the absolute address of the input variable of the | |
| // given name inside the receiving module instance. | |
| func (m ModuleInstance) InputVariable(name string) AbsInputVariableInstance { | |
| return AbsInputVariableInstance{ | |
| Module: m, | |
| Variable: InputVariable{ | |
| Name: name, | |
| }, | |
| } | |
| } | |
| func (v AbsInputVariableInstance) String() string { | |
| if len(v.Module) == 0 { | |
| return v.Variable.String() | |
| } | |
| return fmt.Sprintf("%s.%s", v.Module.String(), v.Variable.String()) | |
| } | |
| func (v AbsInputVariableInstance) UniqueKey() UniqueKey { | |
| return absInputVariableInstanceUniqueKey(v.String()) | |
| } | |
| func (v AbsInputVariableInstance) checkableSigil() {} | |
| func (v AbsInputVariableInstance) CheckRule(typ CheckRuleType, i int) CheckRule { | |
| return CheckRule{ | |
| Container: v, | |
| Type: typ, | |
| Index: i, | |
| } | |
| } | |
| // ModuleInstance returns the module instance portion of the address. | |
| func (v AbsInputVariableInstance) ModuleInstance() ModuleInstance { | |
| return v.Module | |
| } | |
| func (v AbsInputVariableInstance) ConfigCheckable() ConfigCheckable { | |
| return ConfigInputVariable{ | |
| Module: v.Module.Module(), | |
| Variable: v.Variable, | |
| } | |
| } | |
| func (v AbsInputVariableInstance) CheckableKind() CheckableKind { | |
| return CheckableInputVariable | |
| } | |
| type ConfigInputVariable struct { | |
| Module Module | |
| Variable InputVariable | |
| } | |
| var _ ConfigCheckable = ConfigInputVariable{} | |
| func (v ConfigInputVariable) UniqueKey() UniqueKey { | |
| return configInputVariableUniqueKey(v.String()) | |
| } | |
| func (v ConfigInputVariable) configCheckableSigil() {} | |
| func (v ConfigInputVariable) CheckableKind() CheckableKind { | |
| return CheckableInputVariable | |
| } | |
| func (v ConfigInputVariable) String() string { | |
| if len(v.Module) == 0 { | |
| return v.Variable.String() | |
| } | |
| return fmt.Sprintf("%s.%s", v.Module.String(), v.Variable.String()) | |
| } | |
| type configInputVariableUniqueKey string | |
| func (k configInputVariableUniqueKey) uniqueKeySigil() {} | |
| type absInputVariableInstanceUniqueKey string | |
| func (k absInputVariableInstanceUniqueKey) uniqueKeySigil() {} |