podman
118 строк · 2.3 Кб
1package sprig
2
3func get(d map[string]interface{}, key string) interface{} {
4if val, ok := d[key]; ok {
5return val
6}
7return ""
8}
9
10func set(d map[string]interface{}, key string, value interface{}) map[string]interface{} {
11d[key] = value
12return d
13}
14
15func unset(d map[string]interface{}, key string) map[string]interface{} {
16delete(d, key)
17return d
18}
19
20func hasKey(d map[string]interface{}, key string) bool {
21_, ok := d[key]
22return ok
23}
24
25func pluck(key string, d ...map[string]interface{}) []interface{} {
26res := []interface{}{}
27for _, dict := range d {
28if val, ok := dict[key]; ok {
29res = append(res, val)
30}
31}
32return res
33}
34
35func keys(dicts ...map[string]interface{}) []string {
36k := []string{}
37for _, dict := range dicts {
38for key := range dict {
39k = append(k, key)
40}
41}
42return k
43}
44
45func pick(dict map[string]interface{}, keys ...string) map[string]interface{} {
46res := map[string]interface{}{}
47for _, k := range keys {
48if v, ok := dict[k]; ok {
49res[k] = v
50}
51}
52return res
53}
54
55func omit(dict map[string]interface{}, keys ...string) map[string]interface{} {
56res := map[string]interface{}{}
57
58omit := make(map[string]bool, len(keys))
59for _, k := range keys {
60omit[k] = true
61}
62
63for k, v := range dict {
64if _, ok := omit[k]; !ok {
65res[k] = v
66}
67}
68return res
69}
70
71func dict(v ...interface{}) map[string]interface{} {
72dict := map[string]interface{}{}
73lenv := len(v)
74for i := 0; i < lenv; i += 2 {
75key := strval(v[i])
76if i+1 >= lenv {
77dict[key] = ""
78continue
79}
80dict[key] = v[i+1]
81}
82return dict
83}
84
85func values(dict map[string]interface{}) []interface{} {
86values := []interface{}{}
87for _, value := range dict {
88values = append(values, value)
89}
90
91return values
92}
93
94func dig(ps ...interface{}) (interface{}, error) {
95if len(ps) < 3 {
96panic("dig needs at least three arguments")
97}
98dict := ps[len(ps)-1].(map[string]interface{})
99def := ps[len(ps)-2]
100ks := make([]string, len(ps)-2)
101for i := 0; i < len(ks); i++ {
102ks[i] = ps[i].(string)
103}
104
105return digFromDict(dict, def, ks)
106}
107
108func digFromDict(dict map[string]interface{}, d interface{}, ks []string) (interface{}, error) {
109k, ns := ks[0], ks[1:len(ks)]
110step, has := dict[k]
111if !has {
112return d, nil
113}
114if len(ns) == 0 {
115return step, nil
116}
117return digFromDict(step.(map[string]interface{}), d, ns)
118}
119