45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package marks
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/zclconf/go-cty/cty"
|
|
)
|
|
|
|
// valueMarks allow creating strictly typed values for use as cty.Value marks.
|
|
// The variable name for new values should be the title-cased format of the
|
|
// value to better match the GoString output for debugging.
|
|
type valueMark string
|
|
|
|
func (m valueMark) GoString() string {
|
|
return "marks." + strings.Title(string(m))
|
|
}
|
|
|
|
// Has returns true if and only if the cty.Value has the given mark.
|
|
func Has(val cty.Value, mark valueMark) bool {
|
|
return val.HasMark(mark)
|
|
}
|
|
|
|
// Contains returns true if the cty.Value or any any value within it contains
|
|
// the given mark.
|
|
func Contains(val cty.Value, mark valueMark) bool {
|
|
ret := false
|
|
cty.Walk(val, func(_ cty.Path, v cty.Value) (bool, error) {
|
|
if v.HasMark(mark) {
|
|
ret = true
|
|
return false, nil
|
|
}
|
|
return true, nil
|
|
})
|
|
return ret
|
|
}
|
|
|
|
// Sensitive indicates that this value is marked as sensitive in the context of
|
|
// Terraform.
|
|
var Sensitive = valueMark("sensitive")
|
|
|
|
// TypeType is used to indicate that the value contains a representation of
|
|
// another value's type. This is part of the implementation of the console-only
|
|
// `type` function.
|
|
var TypeType = valueMark("typeType")
|