mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-19 13:29:35 +00:00
``` $ gvt fetch -tag v1.1.0 github.com/weaveworks/promrus 2017/10/08 XX:XX:XX Fetching: github.com/weaveworks/promrus 2017/10/08 XX:XX:XX · Fetching recursive dependency: github.com/julienschmidt/httprouter 2017/10/08 XX:XX:XX · Fetching recursive dependency: github.com/go-kit/kit/log 2017/10/08 XX:XX:XX ·· Fetching recursive dependency: github.com/go-stack/stack 2017/10/08 XX:XX:XX ·· Fetching recursive dependency: github.com/go-logfmt/logfmt 2017/10/08 XX:XX:XX ··· Fetching recursive dependency: github.com/kr/logfmt 2017/10/08 XX:XX:XX · Skipping (existing): gopkg.in/yaml.v2 2017/10/08 XX:XX:XX · Fetching recursive dependency: gopkg.in/alecthomas/kingpin.v2 2017/10/08 XX:XX:XX ·· Fetching recursive dependency: github.com/alecthomas/units 2017/10/08 XX:XX:XX ·· Fetching recursive dependency: github.com/alecthomas/template 2017/10/08 XX:XX:XX · Skipping (existing): golang.org/x/net/context/ctxhttp 2017/10/08 XX:XX:XX · Fetching recursive dependency: github.com/stretchr/objx 2017/10/08 XX:XX:XX · Skipping (existing): golang.org/x/net/context 2017/10/08 XX:XX:XX · Fetching recursive dependency: github.com/pkg/errors ```
82 lines
2.1 KiB
Go
82 lines
2.1 KiB
Go
package objx
|
|
|
|
// Exclude returns a new Map with the keys in the specified []string
|
|
// excluded.
|
|
func (d Map) Exclude(exclude []string) Map {
|
|
|
|
excluded := make(Map)
|
|
for k, v := range d {
|
|
var shouldInclude bool = true
|
|
for _, toExclude := range exclude {
|
|
if k == toExclude {
|
|
shouldInclude = false
|
|
break
|
|
}
|
|
}
|
|
if shouldInclude {
|
|
excluded[k] = v
|
|
}
|
|
}
|
|
|
|
return excluded
|
|
}
|
|
|
|
// Copy creates a shallow copy of the Obj.
|
|
func (m Map) Copy() Map {
|
|
copied := make(map[string]interface{})
|
|
for k, v := range m {
|
|
copied[k] = v
|
|
}
|
|
return New(copied)
|
|
}
|
|
|
|
// Merge blends the specified map with a copy of this map and returns the result.
|
|
//
|
|
// Keys that appear in both will be selected from the specified map.
|
|
// This method requires that the wrapped object be a map[string]interface{}
|
|
func (m Map) Merge(merge Map) Map {
|
|
return m.Copy().MergeHere(merge)
|
|
}
|
|
|
|
// Merge blends the specified map with this map and returns the current map.
|
|
//
|
|
// Keys that appear in both will be selected from the specified map. The original map
|
|
// will be modified. This method requires that
|
|
// the wrapped object be a map[string]interface{}
|
|
func (m Map) MergeHere(merge Map) Map {
|
|
|
|
for k, v := range merge {
|
|
m[k] = v
|
|
}
|
|
|
|
return m
|
|
|
|
}
|
|
|
|
// Transform builds a new Obj giving the transformer a chance
|
|
// to change the keys and values as it goes. This method requires that
|
|
// the wrapped object be a map[string]interface{}
|
|
func (m Map) Transform(transformer func(key string, value interface{}) (string, interface{})) Map {
|
|
newMap := make(map[string]interface{})
|
|
for k, v := range m {
|
|
modifiedKey, modifiedVal := transformer(k, v)
|
|
newMap[modifiedKey] = modifiedVal
|
|
}
|
|
return New(newMap)
|
|
}
|
|
|
|
// TransformKeys builds a new map using the specified key mapping.
|
|
//
|
|
// Unspecified keys will be unaltered.
|
|
// This method requires that the wrapped object be a map[string]interface{}
|
|
func (m Map) TransformKeys(mapping map[string]string) Map {
|
|
return m.Transform(func(key string, value interface{}) (string, interface{}) {
|
|
|
|
if newKey, ok := mapping[key]; ok {
|
|
return newKey, value
|
|
}
|
|
|
|
return key, value
|
|
})
|
|
}
|