Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit 01be924

Browse files
authored
Merge pull request #412 from joshwget/refactor-and-expose-convertkeystostrings
Refactor and expose convertKeysToStrings
2 parents 15bf99a + f957976 commit 01be924

File tree

2 files changed

+27
-34
lines changed

2 files changed

+27
-34
lines changed

config/validation.go

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"strconv"
66
"strings"
77

8+
"github.com/docker/libcompose/utils"
89
"github.com/xeipuuv/gojsonschema"
910
)
1011

@@ -70,55 +71,22 @@ func getValue(val interface{}, context string) string {
7071
return ""
7172
}
7273

73-
// Converts map[interface{}]interface{} to map[string]interface{} recursively
74-
// gojsonschema only accepts map[string]interface{}
7574
func convertServiceMapKeysToStrings(serviceMap RawServiceMap) RawServiceMap {
7675
newServiceMap := make(RawServiceMap)
77-
7876
for k, v := range serviceMap {
7977
newServiceMap[k] = convertServiceKeysToStrings(v)
8078
}
81-
8279
return newServiceMap
8380
}
8481

8582
func convertServiceKeysToStrings(service RawService) RawService {
8683
newService := make(RawService)
87-
8884
for k, v := range service {
89-
newService[k] = convertKeysToStrings(v)
85+
newService[k] = utils.ConvertKeysToStrings(v)
9086
}
91-
9287
return newService
9388
}
9489

95-
func convertKeysToStrings(item interface{}) interface{} {
96-
switch typedDatas := item.(type) {
97-
98-
case map[interface{}]interface{}:
99-
newMap := make(map[string]interface{})
100-
101-
for key, value := range typedDatas {
102-
stringKey := key.(string)
103-
newMap[stringKey] = convertKeysToStrings(value)
104-
}
105-
return newMap
106-
107-
case []interface{}:
108-
// newArray := make([]interface{}, 0) will cause golint to complain
109-
var newArray []interface{}
110-
newArray = make([]interface{}, 0)
111-
112-
for _, value := range typedDatas {
113-
newArray = append(newArray, convertKeysToStrings(value))
114-
}
115-
return newArray
116-
117-
default:
118-
return item
119-
}
120-
}
121-
12290
var dockerConfigHints = map[string]string{
12391
"cpu_share": "cpu_shares",
12492
"add_host": "extra_hosts",

utils/util.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,28 @@ func Merge(coll1, coll2 []string) []string {
135135
}
136136
return r
137137
}
138+
139+
// ConvertKeysToStrings converts map[interface{}] to map[string] recursively
140+
func ConvertKeysToStrings(item interface{}) interface{} {
141+
switch typedDatas := item.(type) {
142+
case map[string]interface{}:
143+
for key, value := range typedDatas {
144+
typedDatas[key] = ConvertKeysToStrings(value)
145+
}
146+
return typedDatas
147+
case map[interface{}]interface{}:
148+
newMap := make(map[string]interface{})
149+
for key, value := range typedDatas {
150+
stringKey := key.(string)
151+
newMap[stringKey] = ConvertKeysToStrings(value)
152+
}
153+
return newMap
154+
case []interface{}:
155+
for i, value := range typedDatas {
156+
typedDatas[i] = ConvertKeysToStrings(value)
157+
}
158+
return typedDatas
159+
default:
160+
return item
161+
}
162+
}

0 commit comments

Comments
 (0)