github.com/hairyhenderson/templater@v3.5.0+incompatible/funcs/coll.go (about) 1 package funcs 2 3 import ( 4 "sync" 5 6 "github.com/hairyhenderson/gomplate/conv" 7 8 "github.com/hairyhenderson/gomplate/coll" 9 "github.com/pkg/errors" 10 ) 11 12 var ( 13 collNS *CollFuncs 14 collNSInit sync.Once 15 ) 16 17 // CollNS - 18 func CollNS() *CollFuncs { 19 collNSInit.Do(func() { collNS = &CollFuncs{} }) 20 return collNS 21 } 22 23 // AddCollFuncs - 24 func AddCollFuncs(f map[string]interface{}) { 25 f["coll"] = CollNS 26 27 f["has"] = CollNS().Has 28 f["slice"] = CollNS().Slice 29 f["dict"] = CollNS().Dict 30 f["keys"] = CollNS().Keys 31 f["values"] = CollNS().Values 32 f["append"] = CollNS().Append 33 f["prepend"] = CollNS().Prepend 34 f["uniq"] = CollNS().Uniq 35 f["reverse"] = CollNS().Reverse 36 f["merge"] = CollNS().Merge 37 f["sort"] = CollNS().Sort 38 f["jsonpath"] = CollNS().JSONPath 39 } 40 41 // CollFuncs - 42 type CollFuncs struct{} 43 44 // Slice - 45 func (f *CollFuncs) Slice(args ...interface{}) []interface{} { 46 return coll.Slice(args...) 47 } 48 49 // Has - 50 func (f *CollFuncs) Has(in interface{}, key string) bool { 51 return coll.Has(in, key) 52 } 53 54 // Dict - 55 func (f *CollFuncs) Dict(in ...interface{}) (map[string]interface{}, error) { 56 return coll.Dict(in...) 57 } 58 59 // Keys - 60 func (f *CollFuncs) Keys(in ...map[string]interface{}) ([]string, error) { 61 return coll.Keys(in...) 62 } 63 64 // Values - 65 func (f *CollFuncs) Values(in ...map[string]interface{}) ([]interface{}, error) { 66 return coll.Values(in...) 67 } 68 69 // Append - 70 func (f *CollFuncs) Append(v interface{}, list interface{}) ([]interface{}, error) { 71 return coll.Append(v, list) 72 } 73 74 // Prepend - 75 func (f *CollFuncs) Prepend(v interface{}, list interface{}) ([]interface{}, error) { 76 return coll.Prepend(v, list) 77 } 78 79 // Uniq - 80 func (f *CollFuncs) Uniq(in interface{}) ([]interface{}, error) { 81 return coll.Uniq(in) 82 } 83 84 // Reverse - 85 func (f *CollFuncs) Reverse(in interface{}) ([]interface{}, error) { 86 return coll.Reverse(in) 87 } 88 89 // Merge - 90 func (f *CollFuncs) Merge(dst map[string]interface{}, src ...map[string]interface{}) (map[string]interface{}, error) { 91 return coll.Merge(dst, src...) 92 } 93 94 // Sort - 95 func (f *CollFuncs) Sort(args ...interface{}) ([]interface{}, error) { 96 var ( 97 key string 98 list interface{} 99 ) 100 if len(args) == 0 || len(args) > 2 { 101 return nil, errors.Errorf("wrong number of args: wanted 1 or 2, got %d", len(args)) 102 } 103 if len(args) == 1 { 104 list = args[0] 105 } 106 if len(args) == 2 { 107 key = conv.ToString(args[0]) 108 list = args[1] 109 } 110 return coll.Sort(key, list) 111 } 112 113 // JSONPath - 114 func (f *CollFuncs) JSONPath(p string, in interface{}) (interface{}, error) { 115 return coll.JSONPath(p, in) 116 }