gopkg.in/alecthomas/gometalinter.v3@v3.0.0/_linters/src/github.com/stretchr/objx/mutations.go (about)

     1  package objx
     2  
     3  // Exclude returns a new Map with the keys in the specified []string
     4  // excluded.
     5  func (m Map) Exclude(exclude []string) Map {
     6  	excluded := make(Map)
     7  	for k, v := range m {
     8  		if !contains(exclude, k) {
     9  			excluded[k] = v
    10  		}
    11  	}
    12  	return excluded
    13  }
    14  
    15  // Copy creates a shallow copy of the Obj.
    16  func (m Map) Copy() Map {
    17  	copied := Map{}
    18  	for k, v := range m {
    19  		copied[k] = v
    20  	}
    21  	return copied
    22  }
    23  
    24  // Merge blends the specified map with a copy of this map and returns the result.
    25  //
    26  // Keys that appear in both will be selected from the specified map.
    27  // This method requires that the wrapped object be a map[string]interface{}
    28  func (m Map) Merge(merge Map) Map {
    29  	return m.Copy().MergeHere(merge)
    30  }
    31  
    32  // MergeHere blends the specified map with this map and returns the current map.
    33  //
    34  // Keys that appear in both will be selected from the specified map. The original map
    35  // will be modified. This method requires that
    36  // the wrapped object be a map[string]interface{}
    37  func (m Map) MergeHere(merge Map) Map {
    38  	for k, v := range merge {
    39  		m[k] = v
    40  	}
    41  	return m
    42  }
    43  
    44  // Transform builds a new Obj giving the transformer a chance
    45  // to change the keys and values as it goes. This method requires that
    46  // the wrapped object be a map[string]interface{}
    47  func (m Map) Transform(transformer func(key string, value interface{}) (string, interface{})) Map {
    48  	newMap := Map{}
    49  	for k, v := range m {
    50  		modifiedKey, modifiedVal := transformer(k, v)
    51  		newMap[modifiedKey] = modifiedVal
    52  	}
    53  	return newMap
    54  }
    55  
    56  // TransformKeys builds a new map using the specified key mapping.
    57  //
    58  // Unspecified keys will be unaltered.
    59  // This method requires that the wrapped object be a map[string]interface{}
    60  func (m Map) TransformKeys(mapping map[string]string) Map {
    61  	return m.Transform(func(key string, value interface{}) (string, interface{}) {
    62  		if newKey, ok := mapping[key]; ok {
    63  			return newKey, value
    64  		}
    65  		return key, value
    66  	})
    67  }
    68  
    69  // Checks if a string slice contains a string
    70  func contains(s []string, e string) bool {
    71  	for _, a := range s {
    72  		if a == e {
    73  			return true
    74  		}
    75  	}
    76  	return false
    77  }