aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/zclconf/go-cty/cty/type.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/zclconf/go-cty/cty/type.go')
-rw-r--r--vendor/github.com/zclconf/go-cty/cty/type.go95
1 files changed, 95 insertions, 0 deletions
diff --git a/vendor/github.com/zclconf/go-cty/cty/type.go b/vendor/github.com/zclconf/go-cty/cty/type.go
new file mode 100644
index 0000000..ae5f1c8
--- /dev/null
+++ b/vendor/github.com/zclconf/go-cty/cty/type.go
@@ -0,0 +1,95 @@
1package cty
2
3// Type represents value types within the type system.
4//
5// This is a closed interface type, meaning that only the concrete
6// implementations provided within this package are considered valid.
7type Type struct {
8 typeImpl
9}
10
11type typeImpl interface {
12 // isTypeImpl is a do-nothing method that exists only to express
13 // that a type is an implementation of typeImpl.
14 isTypeImpl() typeImplSigil
15
16 // Equals returns true if the other given Type exactly equals the
17 // receiver Type.
18 Equals(other Type) bool
19
20 // FriendlyName returns a human-friendly *English* name for the given
21 // type.
22 FriendlyName() string
23
24 // GoString implements the GoStringer interface from package fmt.
25 GoString() string
26}
27
28// Base implementation of Type to embed into concrete implementations
29// to signal that they are implementations of Type.
30type typeImplSigil struct{}
31
32func (t typeImplSigil) isTypeImpl() typeImplSigil {
33 return typeImplSigil{}
34}
35
36// Equals returns true if the other given Type exactly equals the receiver
37// type.
38func (t Type) Equals(other Type) bool {
39 return t.typeImpl.Equals(other)
40}
41
42// FriendlyName returns a human-friendly *English* name for the given type.
43func (t Type) FriendlyName() string {
44 return t.typeImpl.FriendlyName()
45}
46
47// GoString returns a string approximating how the receiver type would be
48// expressed in Go source code.
49func (t Type) GoString() string {
50 if t.typeImpl == nil {
51 return "cty.NilType"
52 }
53
54 return t.typeImpl.GoString()
55}
56
57// NilType is an invalid type used when a function is returning an error
58// and has no useful type to return. It should not be used and any methods
59// called on it will panic.
60var NilType = Type{}
61
62// HasDynamicTypes returns true either if the receiver is itself
63// DynamicPseudoType or if it is a compound type whose descendent elements
64// are DynamicPseudoType.
65func (t Type) HasDynamicTypes() bool {
66 switch {
67 case t == DynamicPseudoType:
68 return true
69 case t.IsPrimitiveType():
70 return false
71 case t.IsCollectionType():
72 return false
73 case t.IsObjectType():
74 attrTypes := t.AttributeTypes()
75 for _, at := range attrTypes {
76 if at.HasDynamicTypes() {
77 return true
78 }
79 }
80 return false
81 case t.IsTupleType():
82 elemTypes := t.TupleElementTypes()
83 for _, et := range elemTypes {
84 if et.HasDynamicTypes() {
85 return true
86 }
87 }
88 return false
89 case t.IsCapsuleType():
90 return false
91 default:
92 // Should never happen, since above should be exhaustive
93 panic("HasDynamicTypes does not support the given type")
94 }
95}