maps

package module
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 8, 2023 License: MIT Imports: 4 Imported by: 6

Documentation

Overview

Package maps provides reusable functions for manipulating nested map[string]interface{} maps are common unmarshal products from various serializers such as json, yaml etc.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Copy

func Copy(mp map[string]interface{}) map[string]interface{}

Copy returns a deep copy of a conf map.

It's important to note that all nested maps should be map[string]interface{} and not map[interface{}]interface{}. Use IntfaceKeysToStrings() to convert if necessary.

func Delete

func Delete(mp map[string]interface{}, path []string)

Delete removes the entry present at a given path, from the map. The path is the key map slice, for eg:, parent.child.key -> [parent child key]. Any empty, nested map on the path, is recursively deleted.

It's important to note that all nested maps should be map[string]interface{} and not map[interface{}]interface{}. Use IntfaceKeysToStrings() to convert if necessary.

func Flatten

func Flatten(m map[string]interface{}, keys []string, delim string) (map[string]interface{}, map[string][]string)

Flatten takes a map[string]interface{} and traverses it and flattens nested children into keys delimited by delim.

It's important to note that all nested maps should be map[string]interface{} and not map[interface{}]interface{}. Use IntfaceKeysToStrings() to convert if necessary.

eg: `{ "parent": { "child": 123 }}` becomes `{ "parent.child": 123 }` In addition, it keeps track of and returns a map of the delimited keypaths with a slice of key parts, for eg: { "parent.child": ["parent", "child"] }. This parts list is used to remember the key path's original structure to unflatten later.

func Int64SliceToLookupMap

func Int64SliceToLookupMap(s []int64) map[int64]bool

Int64SliceToLookupMap takes a slice of int64s and returns a lookup map with the slice values as keys with true values.

func IntfaceKeysToStrings

func IntfaceKeysToStrings(mp map[string]interface{})

IntfaceKeysToStrings recursively converts map[interface{}]interface{} to map[string]interface{}. Some parses such as YAML unmarshal return this.

func Merge

func Merge(a, b map[string]interface{})

Merge recursively merges map a into b (left to right), mutating and expanding map b. Note that there's no copying involved, so map b will retain references to map a.

It's important to note that all nested maps should be map[string]interface{} and not map[interface{}]interface{}. Use IntfaceKeysToStrings() to convert if necessary.

func MergeStrict

func MergeStrict(a, b map[string]interface{}) error

MergeStrict recursively merges map a into b (left to right), mutating and expanding map b. Note that there's no copying involved, so map b will retain references to map a. If an equal key in either of the maps has a different value type, it will return the first error.

It's important to note that all nested maps should be map[string]interface{} and not map[interface{}]interface{}. Use IntfaceKeysToStrings() to convert if necessary.

func Search(mp map[string]interface{}, path []string) interface{}

Search recursively searches a map for a given path. The path is the key map slice, for eg:, parent.child.key -> [parent child key].

It's important to note that all nested maps should be map[string]interface{} and not map[interface{}]interface{}. Use IntfaceKeysToStrings() to convert if necessary.

func StringSliceToLookupMap

func StringSliceToLookupMap(s []string) map[string]bool

StringSliceToLookupMap takes a slice of strings and returns a lookup map with the slice values as keys with true values.

func Unflatten

func Unflatten(m map[string]interface{}, delim string) map[string]interface{}

Unflatten takes a flattened key:value map (non-nested with delimited keys) and returns a nested map where the keys are split into hierarchies by the given delimiter. For instance, `parent.child.key: 1` to `{parent: {child: {key: 1}}}`

It's important to note that all nested maps should be map[string]interface{} and not map[interface{}]interface{}. Use IntfaceKeysToStrings() to convert if necessary.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL