govendor fetch github.com/zclconf/go-cty/...
This commit is contained in:
parent
a79d620f03
commit
b41f08d79d
|
@ -19,12 +19,24 @@ type setRules struct {
|
||||||
Type Type
|
Type Type
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hash returns a hash value for the receiver that can be used for equality
|
||||||
|
// checks where some inaccuracy is tolerable.
|
||||||
|
//
|
||||||
|
// The hash function is value-type-specific, so it is not meaningful to compare
|
||||||
|
// hash results for values of different types.
|
||||||
|
//
|
||||||
|
// This function is not safe to use for security-related applications, since
|
||||||
|
// the hash used is not strong enough.
|
||||||
|
func (val Value) Hash() int {
|
||||||
|
hashBytes := makeSetHashBytes(val)
|
||||||
|
return int(crc32.ChecksumIEEE(hashBytes))
|
||||||
|
}
|
||||||
|
|
||||||
func (r setRules) Hash(v interface{}) int {
|
func (r setRules) Hash(v interface{}) int {
|
||||||
hashBytes := makeSetHashBytes(Value{
|
return Value{
|
||||||
ty: r.Type,
|
ty: r.Type,
|
||||||
v: v,
|
v: v,
|
||||||
})
|
}.Hash()
|
||||||
return int(crc32.ChecksumIEEE(hashBytes))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r setRules) Equivalent(v1 interface{}, v2 interface{}) bool {
|
func (r setRules) Equivalent(v1 interface{}, v2 interface{}) bool {
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
package cty
|
||||||
|
|
||||||
|
// UnknownAsNull returns a value of the same type as the given value but
|
||||||
|
// with any unknown values (including nested values) replaced with null
|
||||||
|
// values of the same type.
|
||||||
|
//
|
||||||
|
// This can be useful if a result is to be serialized in a format that can't
|
||||||
|
// represent unknowns, such as JSON, as long as the caller does not need to
|
||||||
|
// retain the unknown value information.
|
||||||
|
func UnknownAsNull(val Value) Value {
|
||||||
|
if !val.IsKnown() {
|
||||||
|
return NullVal(val.Type())
|
||||||
|
}
|
||||||
|
|
||||||
|
ty := val.Type()
|
||||||
|
switch {
|
||||||
|
case ty.IsListType() || ty.IsTupleType() || ty.IsSetType():
|
||||||
|
length := val.LengthInt()
|
||||||
|
if length == 0 {
|
||||||
|
// If there are no elements then we can't have unknowns
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
vals := make([]Value, 0, length)
|
||||||
|
it := val.ElementIterator()
|
||||||
|
for it.Next() {
|
||||||
|
_, v := it.Element()
|
||||||
|
vals = append(vals, UnknownAsNull(v))
|
||||||
|
}
|
||||||
|
switch {
|
||||||
|
case ty.IsListType():
|
||||||
|
return ListVal(vals)
|
||||||
|
case ty.IsTupleType():
|
||||||
|
return TupleVal(vals)
|
||||||
|
default:
|
||||||
|
return SetVal(vals)
|
||||||
|
}
|
||||||
|
case ty.IsMapType() || ty.IsObjectType():
|
||||||
|
var length int
|
||||||
|
switch {
|
||||||
|
case ty.IsMapType():
|
||||||
|
length = val.LengthInt()
|
||||||
|
default:
|
||||||
|
length = len(val.Type().AttributeTypes())
|
||||||
|
}
|
||||||
|
if length == 0 {
|
||||||
|
// If there are no elements then we can't have unknowns
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
vals := make(map[string]Value, length)
|
||||||
|
it := val.ElementIterator()
|
||||||
|
for it.Next() {
|
||||||
|
k, v := it.Element()
|
||||||
|
vals[k.AsString()] = UnknownAsNull(v)
|
||||||
|
}
|
||||||
|
switch {
|
||||||
|
case ty.IsMapType():
|
||||||
|
return MapVal(vals)
|
||||||
|
default:
|
||||||
|
return ObjectVal(vals)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return val
|
||||||
|
}
|
|
@ -800,6 +800,10 @@ func (val Value) LengthInt() int {
|
||||||
// For tuples, we can return the length even if the value is not known.
|
// For tuples, we can return the length even if the value is not known.
|
||||||
return val.Type().Length()
|
return val.Type().Length()
|
||||||
}
|
}
|
||||||
|
if val.Type().IsObjectType() {
|
||||||
|
// For objects, the length is the number of attributes associated with the type.
|
||||||
|
return len(val.Type().AttributeTypes())
|
||||||
|
}
|
||||||
if !val.IsKnown() {
|
if !val.IsKnown() {
|
||||||
panic("value is not known")
|
panic("value is not known")
|
||||||
}
|
}
|
||||||
|
|
|
@ -2420,46 +2420,46 @@
|
||||||
"revisionTime": "2016-10-29T10:40:18Z"
|
"revisionTime": "2016-10-29T10:40:18Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "lGCvuEPfb2vhxEgYamNhnd1jYH8=",
|
"checksumSHA1": "4REWNRi5Dg7Kxj1US72+/oVii3Q=",
|
||||||
"path": "github.com/zclconf/go-cty/cty",
|
"path": "github.com/zclconf/go-cty/cty",
|
||||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||||
"revisionTime": "2018-03-02T16:03:48Z"
|
"revisionTime": "2018-03-26T23:07:54Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "gDpi8g5VxCRM3JKm/kaYlGdFUdQ=",
|
"checksumSHA1": "gDpi8g5VxCRM3JKm/kaYlGdFUdQ=",
|
||||||
"path": "github.com/zclconf/go-cty/cty/convert",
|
"path": "github.com/zclconf/go-cty/cty/convert",
|
||||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||||
"revisionTime": "2018-03-02T16:03:48Z"
|
"revisionTime": "2018-03-26T23:07:54Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "MyyLCGg3RREMllTJyK6ehZl/dHk=",
|
"checksumSHA1": "MyyLCGg3RREMllTJyK6ehZl/dHk=",
|
||||||
"path": "github.com/zclconf/go-cty/cty/function",
|
"path": "github.com/zclconf/go-cty/cty/function",
|
||||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||||
"revisionTime": "2018-03-02T16:03:48Z"
|
"revisionTime": "2018-03-26T23:07:54Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "4R+DQqBew6i9a4lYiLZW1OXVwTI=",
|
"checksumSHA1": "4R+DQqBew6i9a4lYiLZW1OXVwTI=",
|
||||||
"path": "github.com/zclconf/go-cty/cty/function/stdlib",
|
"path": "github.com/zclconf/go-cty/cty/function/stdlib",
|
||||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||||
"revisionTime": "2018-03-02T16:03:48Z"
|
"revisionTime": "2018-03-26T23:07:54Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "tmCzwfNXOEB1sSO7TKVzilb2vjA=",
|
"checksumSHA1": "tmCzwfNXOEB1sSO7TKVzilb2vjA=",
|
||||||
"path": "github.com/zclconf/go-cty/cty/gocty",
|
"path": "github.com/zclconf/go-cty/cty/gocty",
|
||||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||||
"revisionTime": "2018-03-02T16:03:48Z"
|
"revisionTime": "2018-03-26T23:07:54Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "1ApmO+Q33+Oem/3f6BU6sztJWNc=",
|
"checksumSHA1": "1ApmO+Q33+Oem/3f6BU6sztJWNc=",
|
||||||
"path": "github.com/zclconf/go-cty/cty/json",
|
"path": "github.com/zclconf/go-cty/cty/json",
|
||||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||||
"revisionTime": "2018-03-02T16:03:48Z"
|
"revisionTime": "2018-03-26T23:07:54Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "y5Sk+n6SOspFj8mlyb8swr4DMIs=",
|
"checksumSHA1": "y5Sk+n6SOspFj8mlyb8swr4DMIs=",
|
||||||
"path": "github.com/zclconf/go-cty/cty/set",
|
"path": "github.com/zclconf/go-cty/cty/set",
|
||||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||||
"revisionTime": "2018-03-02T16:03:48Z"
|
"revisionTime": "2018-03-26T23:07:54Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "vE43s37+4CJ2CDU6TlOUOYE0K9c=",
|
"checksumSHA1": "vE43s37+4CJ2CDU6TlOUOYE0K9c=",
|
||||||
|
|
Loading…
Reference in New Issue