github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/jobspec/utils.go (about)

     1  package jobspec
     2  
     3  // flattenMapSlice flattens any occurrences of []map[string]interface{} into
     4  // map[string]interface{}.
     5  func flattenMapSlice(m map[string]interface{}) map[string]interface{} {
     6  	newM := make(map[string]interface{}, len(m))
     7  
     8  	for k, v := range m {
     9  		var newV interface{}
    10  
    11  		switch mapV := v.(type) {
    12  		case []map[string]interface{}:
    13  			// Recurse into each map and flatten values
    14  			newMap := map[string]interface{}{}
    15  			for _, innerM := range mapV {
    16  				for innerK, innerV := range flattenMapSlice(innerM) {
    17  					newMap[innerK] = innerV
    18  				}
    19  			}
    20  			newV = newMap
    21  
    22  		case map[string]interface{}:
    23  			// Recursively flatten maps
    24  			newV = flattenMapSlice(mapV)
    25  
    26  		default:
    27  			newV = v
    28  		}
    29  
    30  		newM[k] = newV
    31  	}
    32  
    33  	return newM
    34  }