Skip to content

Commit 5e14a7f

Browse files
committed
cli/compose/loader: rewrite with reflect.TypeFor
Signed-off-by: Sebastiaan van Stijn <[email protected]>
1 parent d20f30c commit 5e14a7f

File tree

2 files changed

+30
-30
lines changed

2 files changed

+30
-30
lines changed

cli/compose/loader/loader.go

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -322,26 +322,26 @@ type Transformer struct {
322322

323323
func createTransformHook(additionalTransformers ...Transformer) mapstructure.DecodeHookFuncType {
324324
transforms := map[reflect.Type]func(any) (any, error){
325-
reflect.TypeOf(types.External{}): transformExternal,
326-
reflect.TypeOf(types.HealthCheckTest{}): transformHealthCheckTest,
327-
reflect.TypeOf(types.ShellCommand{}): transformShellCommand,
328-
reflect.TypeOf(types.StringList{}): transformStringList,
329-
reflect.TypeOf(map[string]string{}): transformMapStringString,
330-
reflect.TypeOf(types.UlimitsConfig{}): transformUlimits,
331-
reflect.TypeOf(types.UnitBytes(0)): transformSize,
332-
reflect.TypeOf([]types.ServicePortConfig{}): transformServicePort,
333-
reflect.TypeOf(types.ServiceSecretConfig{}): transformStringSourceMap,
334-
reflect.TypeOf(types.ServiceConfigObjConfig{}): transformStringSourceMap,
335-
reflect.TypeOf(types.StringOrNumberList{}): transformStringOrNumberList,
336-
reflect.TypeOf(map[string]*types.ServiceNetworkConfig{}): transformServiceNetworkMap,
337-
reflect.TypeOf(types.Mapping{}): transformMappingOrListFunc("=", false),
338-
reflect.TypeOf(types.MappingWithEquals{}): transformMappingOrListFunc("=", true),
339-
reflect.TypeOf(types.Labels{}): transformMappingOrListFunc("=", false),
340-
reflect.TypeOf(types.MappingWithColon{}): transformMappingOrListFunc(":", false),
341-
reflect.TypeOf(types.HostsList{}): transformHostsList,
342-
reflect.TypeOf(types.ServiceVolumeConfig{}): transformServiceVolumeConfig,
343-
reflect.TypeOf(types.BuildConfig{}): transformBuildConfig,
344-
reflect.TypeOf(types.Duration(0)): transformStringToDuration,
325+
reflect.TypeFor[types.External](): transformExternal,
326+
reflect.TypeFor[types.HealthCheckTest](): transformHealthCheckTest,
327+
reflect.TypeFor[types.ShellCommand](): transformShellCommand,
328+
reflect.TypeFor[types.StringList](): transformStringList,
329+
reflect.TypeFor[map[string]string](): transformMapStringString,
330+
reflect.TypeFor[types.UlimitsConfig](): transformUlimits,
331+
reflect.TypeFor[types.UnitBytes](): transformSize,
332+
reflect.TypeFor[[]types.ServicePortConfig](): transformServicePort,
333+
reflect.TypeFor[types.ServiceSecretConfig](): transformStringSourceMap,
334+
reflect.TypeFor[types.ServiceConfigObjConfig](): transformStringSourceMap,
335+
reflect.TypeFor[types.StringOrNumberList](): transformStringOrNumberList,
336+
reflect.TypeFor[map[string]*types.ServiceNetworkConfig](): transformServiceNetworkMap,
337+
reflect.TypeFor[types.Mapping](): transformMappingOrListFunc("=", false),
338+
reflect.TypeFor[types.MappingWithEquals](): transformMappingOrListFunc("=", true),
339+
reflect.TypeFor[types.Labels](): transformMappingOrListFunc("=", false),
340+
reflect.TypeFor[types.MappingWithColon](): transformMappingOrListFunc(":", false),
341+
reflect.TypeFor[types.HostsList](): transformHostsList,
342+
reflect.TypeFor[types.ServiceVolumeConfig](): transformServiceVolumeConfig,
343+
reflect.TypeFor[types.BuildConfig](): transformBuildConfig,
344+
reflect.TypeFor[types.Duration](): transformStringToDuration,
345345
}
346346

347347
for _, transformer := range additionalTransformers {

cli/compose/loader/merge.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ func mergeServices(base, override []types.ServiceConfig) ([]types.ServiceConfig,
5656
overrideServices := mapByName(override)
5757
specials := &specials{
5858
m: map[reflect.Type]func(dst, src reflect.Value) error{
59-
reflect.TypeOf(&types.LoggingConfig{}): safelyMerge(mergeLoggingConfig),
60-
reflect.TypeOf([]types.ServicePortConfig{}): mergeSlice(toServicePortConfigsMap, toServicePortConfigsSlice),
61-
reflect.TypeOf([]types.ServiceSecretConfig{}): mergeSlice(toServiceSecretConfigsMap, toServiceSecretConfigsSlice),
62-
reflect.TypeOf([]types.ServiceConfigObjConfig{}): mergeSlice(toServiceConfigObjConfigsMap, toSServiceConfigObjConfigsSlice),
63-
reflect.TypeOf(&types.UlimitsConfig{}): mergeUlimitsConfig,
64-
reflect.TypeOf([]types.ServiceVolumeConfig{}): mergeSlice(toServiceVolumeConfigsMap, toServiceVolumeConfigsSlice),
65-
reflect.TypeOf(types.ShellCommand{}): mergeShellCommand,
66-
reflect.TypeOf(&types.ServiceNetworkConfig{}): mergeServiceNetworkConfig,
67-
reflect.PointerTo(reflect.TypeOf(uint64(1))): mergeUint64,
59+
reflect.PointerTo(reflect.TypeFor[types.LoggingConfig]()): safelyMerge(mergeLoggingConfig),
60+
reflect.TypeFor[[]types.ServicePortConfig](): mergeSlice(toServicePortConfigsMap, toServicePortConfigsSlice),
61+
reflect.TypeFor[[]types.ServiceSecretConfig](): mergeSlice(toServiceSecretConfigsMap, toServiceSecretConfigsSlice),
62+
reflect.TypeFor[[]types.ServiceConfigObjConfig](): mergeSlice(toServiceConfigObjConfigsMap, toSServiceConfigObjConfigsSlice),
63+
reflect.PointerTo(reflect.TypeFor[types.UlimitsConfig]()): mergeUlimitsConfig,
64+
reflect.TypeFor[[]types.ServiceVolumeConfig](): mergeSlice(toServiceVolumeConfigsMap, toServiceVolumeConfigsSlice),
65+
reflect.TypeFor[types.ShellCommand](): mergeShellCommand,
66+
reflect.PointerTo(reflect.TypeFor[types.ServiceNetworkConfig]()): mergeServiceNetworkConfig,
67+
reflect.PointerTo(reflect.TypeFor[uint64]()): mergeUint64,
6868
},
6969
}
7070
for name, overrideService := range overrideServices {
@@ -77,7 +77,7 @@ func mergeServices(base, override []types.ServiceConfig) ([]types.ServiceConfig,
7777
}
7878
baseServices[name] = overrideService
7979
}
80-
services := []types.ServiceConfig{}
80+
services := make([]types.ServiceConfig, 0, len(baseServices))
8181
for _, baseService := range baseServices {
8282
services = append(services, baseService)
8383
}

0 commit comments

Comments
 (0)