compose/loader: define type for transformer-functions

Also explicitly type transformer-functions

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2019-10-29 00:10:55 +01:00
parent 6eb0c9c613
commit 9118b2b2b8
No known key found for this signature in database
GPG Key ID: 76698F39D527CE8C
1 changed files with 19 additions and 18 deletions

View File

@ -297,10 +297,13 @@ func Transform(source interface{}, target interface{}, additionalTransformers ..
return decoder.Decode(source) return decoder.Decode(source)
} }
// TransformerFunc defines a function to perform the actual transformation
type TransformerFunc func(interface{}) (interface{}, error)
// Transformer defines a map to type transformer // Transformer defines a map to type transformer
type Transformer struct { type Transformer struct {
TypeOf reflect.Type TypeOf reflect.Type
Func func(interface{}) (interface{}, error) Func TransformerFunc
} }
func createTransformHook(additionalTransformers ...Transformer) mapstructure.DecodeHookFuncType { func createTransformHook(additionalTransformers ...Transformer) mapstructure.DecodeHookFuncType {
@ -684,7 +687,7 @@ func absPath(workingDir string, filePath string) string {
return filepath.Join(workingDir, filePath) return filepath.Join(workingDir, filePath)
} }
func transformMapStringString(data interface{}) (interface{}, error) { var transformMapStringString TransformerFunc = func(data interface{}) (interface{}, error) {
switch value := data.(type) { switch value := data.(type) {
case map[string]interface{}: case map[string]interface{}:
return toMapStringString(value, false), nil return toMapStringString(value, false), nil
@ -695,7 +698,7 @@ func transformMapStringString(data interface{}) (interface{}, error) {
} }
} }
func transformExternal(data interface{}) (interface{}, error) { var transformExternal TransformerFunc = func(data interface{}) (interface{}, error) {
switch value := data.(type) { switch value := data.(type) {
case bool: case bool:
return map[string]interface{}{"external": value}, nil return map[string]interface{}{"external": value}, nil
@ -706,7 +709,7 @@ func transformExternal(data interface{}) (interface{}, error) {
} }
} }
func transformServicePort(data interface{}) (interface{}, error) { var transformServicePort TransformerFunc = func(data interface{}) (interface{}, error) {
switch entries := data.(type) { switch entries := data.(type) {
case []interface{}: case []interface{}:
// We process the list instead of individual items here. // We process the list instead of individual items here.
@ -739,7 +742,7 @@ func transformServicePort(data interface{}) (interface{}, error) {
} }
} }
func transformStringSourceMap(data interface{}) (interface{}, error) { var transformStringSourceMap TransformerFunc = func(data interface{}) (interface{}, error) {
switch value := data.(type) { switch value := data.(type) {
case string: case string:
return map[string]interface{}{"source": value}, nil return map[string]interface{}{"source": value}, nil
@ -750,7 +753,7 @@ func transformStringSourceMap(data interface{}) (interface{}, error) {
} }
} }
func transformBuildConfig(data interface{}) (interface{}, error) { var transformBuildConfig TransformerFunc = func(data interface{}) (interface{}, error) {
switch value := data.(type) { switch value := data.(type) {
case string: case string:
return map[string]interface{}{"context": value}, nil return map[string]interface{}{"context": value}, nil
@ -761,7 +764,7 @@ func transformBuildConfig(data interface{}) (interface{}, error) {
} }
} }
func transformServiceVolumeConfig(data interface{}) (interface{}, error) { var transformServiceVolumeConfig TransformerFunc = func(data interface{}) (interface{}, error) {
switch value := data.(type) { switch value := data.(type) {
case string: case string:
return ParseVolume(value) return ParseVolume(value)
@ -772,8 +775,7 @@ func transformServiceVolumeConfig(data interface{}) (interface{}, error) {
} }
} }
// nolint: unparam var transformServiceNetworkMap TransformerFunc = func(value interface{}) (interface{}, error) {
func transformServiceNetworkMap(value interface{}) (interface{}, error) {
if list, ok := value.([]interface{}); ok { if list, ok := value.([]interface{}); ok {
mapValue := map[interface{}]interface{}{} mapValue := map[interface{}]interface{}{}
for _, name := range list { for _, name := range list {
@ -784,8 +786,7 @@ func transformServiceNetworkMap(value interface{}) (interface{}, error) {
return value, nil return value, nil
} }
// nolint: unparam var transformStringOrNumberList TransformerFunc = func(value interface{}) (interface{}, error) {
func transformStringOrNumberList(value interface{}) (interface{}, error) {
list := value.([]interface{}) list := value.([]interface{})
result := make([]string, len(list)) result := make([]string, len(list))
for i, item := range list { for i, item := range list {
@ -794,7 +795,7 @@ func transformStringOrNumberList(value interface{}) (interface{}, error) {
return result, nil return result, nil
} }
func transformStringList(data interface{}) (interface{}, error) { var transformStringList TransformerFunc = func(data interface{}) (interface{}, error) {
switch value := data.(type) { switch value := data.(type) {
case string: case string:
return []string{value}, nil return []string{value}, nil
@ -805,13 +806,13 @@ func transformStringList(data interface{}) (interface{}, error) {
} }
} }
func transformMappingOrListFunc(sep string, allowNil bool) func(interface{}) (interface{}, error) { func transformMappingOrListFunc(sep string, allowNil bool) TransformerFunc {
return func(data interface{}) (interface{}, error) { return func(data interface{}) (interface{}, error) {
return transformMappingOrList(data, sep, allowNil), nil return transformMappingOrList(data, sep, allowNil), nil
} }
} }
func transformListOrMappingFunc(sep string, allowNil bool) func(interface{}) (interface{}, error) { func transformListOrMappingFunc(sep string, allowNil bool) TransformerFunc {
return func(data interface{}) (interface{}, error) { return func(data interface{}) (interface{}, error) {
return transformListOrMapping(data, sep, allowNil), nil return transformListOrMapping(data, sep, allowNil), nil
} }
@ -850,14 +851,14 @@ func transformMappingOrList(mappingOrList interface{}, sep string, allowNil bool
panic(errors.Errorf("expected a map or a list, got %T: %#v", mappingOrList, mappingOrList)) panic(errors.Errorf("expected a map or a list, got %T: %#v", mappingOrList, mappingOrList))
} }
func transformShellCommand(value interface{}) (interface{}, error) { var transformShellCommand TransformerFunc = func(value interface{}) (interface{}, error) {
if str, ok := value.(string); ok { if str, ok := value.(string); ok {
return shellwords.Parse(str) return shellwords.Parse(str)
} }
return value, nil return value, nil
} }
func transformHealthCheckTest(data interface{}) (interface{}, error) { var transformHealthCheckTest TransformerFunc = func(data interface{}) (interface{}, error) {
switch value := data.(type) { switch value := data.(type) {
case string: case string:
return append([]string{"CMD-SHELL"}, value), nil return append([]string{"CMD-SHELL"}, value), nil
@ -868,7 +869,7 @@ func transformHealthCheckTest(data interface{}) (interface{}, error) {
} }
} }
func transformSize(value interface{}) (interface{}, error) { var transformSize TransformerFunc = func(value interface{}) (interface{}, error) {
switch value := value.(type) { switch value := value.(type) {
case int: case int:
return int64(value), nil return int64(value), nil
@ -878,7 +879,7 @@ func transformSize(value interface{}) (interface{}, error) {
panic(errors.Errorf("invalid type for size %T", value)) panic(errors.Errorf("invalid type for size %T", value))
} }
func transformStringToDuration(value interface{}) (interface{}, error) { var transformStringToDuration TransformerFunc = func(value interface{}) (interface{}, error) {
switch value := value.(type) { switch value := value.(type) {
case string: case string:
d, err := time.ParseDuration(value) d, err := time.ParseDuration(value)