]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blobdiff - vendor/github.com/hashicorp/terraform/lang/funcs/collection.go
update vendor and go.mod
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / terraform / lang / funcs / collection.go
index 71b7a846667fa4e6411621313e4c97500999ea83..bcccc1fd2994fa4ac9707564d176573d3074dc1b 100644 (file)
@@ -246,7 +246,7 @@ var CompactFunc = function.New(&function.Spec{
 
                for it := listVal.ElementIterator(); it.Next(); {
                        _, v := it.Element()
-                       if v.AsString() == "" {
+                       if v.IsNull() || v.AsString() == "" {
                                continue
                        }
                        outputList = append(outputList, v)
@@ -363,6 +363,9 @@ var DistinctFunc = function.New(&function.Spec{
                        }
                }
 
+               if len(list) == 0 {
+                       return cty.ListValEmpty(retType.ElementType()), nil
+               }
                return cty.ListVal(list), nil
        },
 })
@@ -389,6 +392,10 @@ var ChunklistFunc = function.New(&function.Spec{
                        return cty.UnknownVal(retType), nil
                }
 
+               if listVal.LengthInt() == 0 {
+                       return cty.ListValEmpty(listVal.Type()), nil
+               }
+
                var size int
                err = gocty.FromCtyValue(args[1], &size)
                if err != nil {
@@ -686,8 +693,10 @@ var LookupFunc = function.New(&function.Spec{
                                        return cty.StringVal(v.AsString()), nil
                                case ty.Equals(cty.Number):
                                        return cty.NumberVal(v.AsBigFloat()), nil
+                               case ty.Equals(cty.Bool):
+                                       return cty.BoolVal(v.True()), nil
                                default:
-                                       return cty.NilVal, errors.New("lookup() can only be used with flat lists")
+                                       return cty.NilVal, errors.New("lookup() can only be used with maps of primitive types")
                                }
                        }
                }
@@ -797,10 +806,12 @@ var MatchkeysFunc = function.New(&function.Spec{
                },
        },
        Type: func(args []cty.Value) (cty.Type, error) {
-               if !args[1].Type().Equals(args[2].Type()) {
-                       return cty.NilType, errors.New("lists must be of the same type")
+               ty, _ := convert.UnifyUnsafe([]cty.Type{args[1].Type(), args[2].Type()})
+               if ty == cty.NilType {
+                       return cty.NilType, errors.New("keys and searchset must be of the same type")
                }
 
+               // the return type is based on args[0] (values)
                return args[0].Type(), nil
        },
        Impl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {
@@ -813,10 +824,14 @@ var MatchkeysFunc = function.New(&function.Spec{
                }
 
                output := make([]cty.Value, 0)
-
                values := args[0]
-               keys := args[1]
-               searchset := args[2]
+
+               // Keys and searchset must be the same type.
+               // We can skip error checking here because we've already verified that
+               // they can be unified in the Type function
+               ty, _ := convert.UnifyUnsafe([]cty.Type{args[1].Type(), args[2].Type()})
+               keys, _ := convert.Convert(args[1], ty)
+               searchset, _ := convert.Convert(args[2], ty)
 
                // if searchset is empty, return an empty list.
                if searchset.LengthInt() == 0 {
@@ -867,7 +882,6 @@ var MergeFunc = function.New(&function.Spec{
                Name:             "maps",
                Type:             cty.DynamicPseudoType,
                AllowDynamicType: true,
-               AllowNull:        true,
        },
        Type: function.StaticReturnType(cty.DynamicPseudoType),
        Impl: func(args []cty.Value, retType cty.Type) (ret cty.Value, err error) {