github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/command/jsonchecks/objects.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: MPL-2.0
     3  
     4  package jsonchecks
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/terramate-io/tf/addrs"
    10  )
    11  
    12  type staticObjectAddr map[string]interface{}
    13  
    14  func makeStaticObjectAddr(addr addrs.ConfigCheckable) staticObjectAddr {
    15  	ret := map[string]interface{}{
    16  		"to_display": addr.String(),
    17  	}
    18  
    19  	switch addr := addr.(type) {
    20  	case addrs.ConfigResource:
    21  		if kind := addr.CheckableKind(); kind != addrs.CheckableResource {
    22  			// Something has gone very wrong
    23  			panic(fmt.Sprintf("%T has CheckableKind %s", addr, kind))
    24  		}
    25  
    26  		ret["kind"] = "resource"
    27  		switch addr.Resource.Mode {
    28  		case addrs.ManagedResourceMode:
    29  			ret["mode"] = "managed"
    30  		case addrs.DataResourceMode:
    31  			ret["mode"] = "data"
    32  		default:
    33  			panic(fmt.Sprintf("unsupported resource mode %#v", addr.Resource.Mode))
    34  		}
    35  		ret["type"] = addr.Resource.Type
    36  		ret["name"] = addr.Resource.Name
    37  		if !addr.Module.IsRoot() {
    38  			ret["module"] = addr.Module.String()
    39  		}
    40  	case addrs.ConfigOutputValue:
    41  		if kind := addr.CheckableKind(); kind != addrs.CheckableOutputValue {
    42  			// Something has gone very wrong
    43  			panic(fmt.Sprintf("%T has CheckableKind %s", addr, kind))
    44  		}
    45  
    46  		ret["kind"] = "output_value"
    47  		ret["name"] = addr.OutputValue.Name
    48  		if !addr.Module.IsRoot() {
    49  			ret["module"] = addr.Module.String()
    50  		}
    51  	case addrs.ConfigCheck:
    52  		if kind := addr.CheckableKind(); kind != addrs.CheckableCheck {
    53  			// Something has gone very wrong
    54  			panic(fmt.Sprintf("%T has CheckableKind %s", addr, kind))
    55  		}
    56  
    57  		ret["kind"] = "check"
    58  		ret["name"] = addr.Check.Name
    59  		if !addr.Module.IsRoot() {
    60  			ret["module"] = addr.Module.String()
    61  		}
    62  	case addrs.ConfigInputVariable:
    63  		if kind := addr.CheckableKind(); kind != addrs.CheckableInputVariable {
    64  			// Something has gone very wrong
    65  			panic(fmt.Sprintf("%T has CheckableKind %s", addr, kind))
    66  		}
    67  
    68  		ret["kind"] = "var"
    69  		ret["name"] = addr.Variable.Name
    70  		if !addr.Module.IsRoot() {
    71  			ret["module"] = addr.Module.String()
    72  		}
    73  	default:
    74  		panic(fmt.Sprintf("unsupported ConfigCheckable implementation %T", addr))
    75  	}
    76  
    77  	return ret
    78  }
    79  
    80  type dynamicObjectAddr map[string]interface{}
    81  
    82  func makeDynamicObjectAddr(addr addrs.Checkable) dynamicObjectAddr {
    83  	ret := map[string]interface{}{
    84  		"to_display": addr.String(),
    85  	}
    86  
    87  	switch addr := addr.(type) {
    88  	case addrs.AbsResourceInstance:
    89  		if !addr.Module.IsRoot() {
    90  			ret["module"] = addr.Module.String()
    91  		}
    92  		if addr.Resource.Key != addrs.NoKey {
    93  			ret["instance_key"] = addr.Resource.Key
    94  		}
    95  	case addrs.AbsOutputValue:
    96  		if !addr.Module.IsRoot() {
    97  			ret["module"] = addr.Module.String()
    98  		}
    99  	case addrs.AbsCheck:
   100  		if !addr.Module.IsRoot() {
   101  			ret["module"] = addr.Module.String()
   102  		}
   103  	case addrs.AbsInputVariableInstance:
   104  		if !addr.Module.IsRoot() {
   105  			ret["module"] = addr.Module.String()
   106  		}
   107  	default:
   108  		panic(fmt.Sprintf("unsupported Checkable implementation %T", addr))
   109  	}
   110  
   111  	return ret
   112  }