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
|
||||
}
|
||||
|
||||
// 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 {
|
||||
hashBytes := makeSetHashBytes(Value{
|
||||
return Value{
|
||||
ty: r.Type,
|
||||
v: v,
|
||||
})
|
||||
return int(crc32.ChecksumIEEE(hashBytes))
|
||||
}.Hash()
|
||||
}
|
||||
|
||||
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.
|
||||
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() {
|
||||
panic("value is not known")
|
||||
}
|
||||
|
|
|
@ -2420,46 +2420,46 @@
|
|||
"revisionTime": "2016-10-29T10:40:18Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "lGCvuEPfb2vhxEgYamNhnd1jYH8=",
|
||||
"checksumSHA1": "4REWNRi5Dg7Kxj1US72+/oVii3Q=",
|
||||
"path": "github.com/zclconf/go-cty/cty",
|
||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
||||
"revisionTime": "2018-03-02T16:03:48Z"
|
||||
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||
"revisionTime": "2018-03-26T23:07:54Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "gDpi8g5VxCRM3JKm/kaYlGdFUdQ=",
|
||||
"path": "github.com/zclconf/go-cty/cty/convert",
|
||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
||||
"revisionTime": "2018-03-02T16:03:48Z"
|
||||
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||
"revisionTime": "2018-03-26T23:07:54Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "MyyLCGg3RREMllTJyK6ehZl/dHk=",
|
||||
"path": "github.com/zclconf/go-cty/cty/function",
|
||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
||||
"revisionTime": "2018-03-02T16:03:48Z"
|
||||
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||
"revisionTime": "2018-03-26T23:07:54Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "4R+DQqBew6i9a4lYiLZW1OXVwTI=",
|
||||
"path": "github.com/zclconf/go-cty/cty/function/stdlib",
|
||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
||||
"revisionTime": "2018-03-02T16:03:48Z"
|
||||
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||
"revisionTime": "2018-03-26T23:07:54Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "tmCzwfNXOEB1sSO7TKVzilb2vjA=",
|
||||
"path": "github.com/zclconf/go-cty/cty/gocty",
|
||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
||||
"revisionTime": "2018-03-02T16:03:48Z"
|
||||
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||
"revisionTime": "2018-03-26T23:07:54Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "1ApmO+Q33+Oem/3f6BU6sztJWNc=",
|
||||
"path": "github.com/zclconf/go-cty/cty/json",
|
||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
||||
"revisionTime": "2018-03-02T16:03:48Z"
|
||||
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||
"revisionTime": "2018-03-26T23:07:54Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "y5Sk+n6SOspFj8mlyb8swr4DMIs=",
|
||||
"path": "github.com/zclconf/go-cty/cty/set",
|
||||
"revision": "49fa5e03c418f95f78684c91e155af06aa901a32",
|
||||
"revisionTime": "2018-03-02T16:03:48Z"
|
||||
"revision": "b7d1e828d86e99040528ce06ce970382c7813f96",
|
||||
"revisionTime": "2018-03-26T23:07:54Z"
|
||||
},
|
||||
{
|
||||
"checksumSHA1": "vE43s37+4CJ2CDU6TlOUOYE0K9c=",
|
||||
|
|
Loading…
Reference in New Issue