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  }