mirror of https://github.com/portainer/portainer
35 lines
738 B
Go
35 lines
738 B
Go
package maps
|
|
|
|
import "strings"
|
|
|
|
// Get a key from a nested map. Not support array for the moment
|
|
func Get(mapObj map[string]interface{}, path string, key string) interface{} {
|
|
if path == "" {
|
|
return mapObj[key]
|
|
}
|
|
paths := strings.Split(path, ".")
|
|
v := mapObj
|
|
for _, p := range paths {
|
|
if p == "" {
|
|
continue
|
|
}
|
|
value, ok := v[p].(map[string]interface{})
|
|
if ok {
|
|
v = value
|
|
} else {
|
|
return ""
|
|
}
|
|
}
|
|
return v[key]
|
|
}
|
|
|
|
// Copy copies all key/value pairs in src adding them to dst.
|
|
// When a key in src is already present in dst,
|
|
// the value in dst will be overwritten by the value associated
|
|
// with the key in src.
|
|
func Copy[M ~map[K]V, K comparable, V any](dst, src M) {
|
|
for k, v := range src {
|
|
dst[k] = v
|
|
}
|
|
}
|