| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package sprig
- func get(d map[string]any, key string) any {
- if val, ok := d[key]; ok {
- return val
- }
- return ""
- }
- func set(d map[string]any, key string, value any) map[string]any {
- d[key] = value
- return d
- }
- func unset(d map[string]any, key string) map[string]any {
- delete(d, key)
- return d
- }
- func hasKey(d map[string]any, key string) bool {
- _, ok := d[key]
- return ok
- }
- func pluck(key string, d ...map[string]any) []any {
- var res []any
- for _, dict := range d {
- if val, ok := dict[key]; ok {
- res = append(res, val)
- }
- }
- return res
- }
- func keys(dicts ...map[string]any) []string {
- k := []string{}
- for _, dict := range dicts {
- for key := range dict {
- k = append(k, key)
- }
- }
- return k
- }
- func pick(dict map[string]any, keys ...string) map[string]any {
- res := map[string]any{}
- for _, k := range keys {
- if v, ok := dict[k]; ok {
- res[k] = v
- }
- }
- return res
- }
- func omit(dict map[string]any, keys ...string) map[string]any {
- res := map[string]any{}
- omit := make(map[string]bool, len(keys))
- for _, k := range keys {
- omit[k] = true
- }
- for k, v := range dict {
- if _, ok := omit[k]; !ok {
- res[k] = v
- }
- }
- return res
- }
- func dict(v ...any) map[string]any {
- dict := map[string]any{}
- lenv := len(v)
- for i := 0; i < lenv; i += 2 {
- key := strval(v[i])
- if i+1 >= lenv {
- dict[key] = ""
- continue
- }
- dict[key] = v[i+1]
- }
- return dict
- }
- func values(dict map[string]any) []any {
- var values []any
- for _, value := range dict {
- values = append(values, value)
- }
- return values
- }
- func dig(ps ...any) (any, error) {
- if len(ps) < 3 {
- panic("dig needs at least three arguments")
- }
- dict := ps[len(ps)-1].(map[string]any)
- def := ps[len(ps)-2]
- ks := make([]string, len(ps)-2)
- for i := 0; i < len(ks); i++ {
- ks[i] = ps[i].(string)
- }
- return digFromDict(dict, def, ks)
- }
- func digFromDict(dict map[string]any, d any, ks []string) (any, error) {
- k, ns := ks[0], ks[1:]
- step, has := dict[k]
- if !has {
- return d, nil
- }
- if len(ns) == 0 {
- return step, nil
- }
- return digFromDict(step.(map[string]any), d, ns)
- }
|