github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/azure/functions/union.go (about) 1 package functions 2 3 import "sort" 4 5 func Union(args ...interface{}) interface{} { 6 if len(args) == 0 { 7 return []interface{}{} 8 } 9 if len(args) == 1 { 10 return args[0] 11 } 12 13 switch args[0].(type) { 14 case map[string]interface{}: 15 return unionMap(args...) 16 case interface{}: 17 return unionArray(args...) 18 } 19 20 return []interface{}{} 21 22 } 23 24 func unionMap(args ...interface{}) interface{} { 25 result := make(map[string]interface{}) 26 27 for _, arg := range args { 28 switch iType := arg.(type) { 29 case map[string]interface{}: 30 for k, v := range iType { 31 result[k] = v 32 } 33 } 34 } 35 36 return result 37 } 38 39 func unionArray(args ...interface{}) interface{} { 40 result := []interface{}{} 41 union := make(map[interface{}]bool) 42 43 for _, arg := range args { 44 switch iType := arg.(type) { 45 case []interface{}: 46 for _, item := range iType { 47 union[item] = true 48 } 49 } 50 } 51 52 for k := range union { 53 result = append(result, k) 54 } 55 sort.Slice(result, func(i, j int) bool { 56 return result[i].(string) < result[j].(string) 57 }) 58 59 return result 60 }