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() {}