mirror of
https://github.com/docker/cli.git
synced 2026-01-26 15:41:42 +03:00
cli/compose/loader: rewrite with reflect.TypeFor
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
@@ -322,26 +322,26 @@ type Transformer struct {
|
||||
|
||||
func createTransformHook(additionalTransformers ...Transformer) mapstructure.DecodeHookFuncType {
|
||||
transforms := map[reflect.Type]func(any) (any, error){
|
||||
reflect.TypeOf(types.External{}): transformExternal,
|
||||
reflect.TypeOf(types.HealthCheckTest{}): transformHealthCheckTest,
|
||||
reflect.TypeOf(types.ShellCommand{}): transformShellCommand,
|
||||
reflect.TypeOf(types.StringList{}): transformStringList,
|
||||
reflect.TypeOf(map[string]string{}): transformMapStringString,
|
||||
reflect.TypeOf(types.UlimitsConfig{}): transformUlimits,
|
||||
reflect.TypeOf(types.UnitBytes(0)): transformSize,
|
||||
reflect.TypeOf([]types.ServicePortConfig{}): transformServicePort,
|
||||
reflect.TypeOf(types.ServiceSecretConfig{}): transformStringSourceMap,
|
||||
reflect.TypeOf(types.ServiceConfigObjConfig{}): transformStringSourceMap,
|
||||
reflect.TypeOf(types.StringOrNumberList{}): transformStringOrNumberList,
|
||||
reflect.TypeOf(map[string]*types.ServiceNetworkConfig{}): transformServiceNetworkMap,
|
||||
reflect.TypeOf(types.Mapping{}): transformMappingOrListFunc("=", false),
|
||||
reflect.TypeOf(types.MappingWithEquals{}): transformMappingOrListFunc("=", true),
|
||||
reflect.TypeOf(types.Labels{}): transformMappingOrListFunc("=", false),
|
||||
reflect.TypeOf(types.MappingWithColon{}): transformMappingOrListFunc(":", false),
|
||||
reflect.TypeOf(types.HostsList{}): transformHostsList,
|
||||
reflect.TypeOf(types.ServiceVolumeConfig{}): transformServiceVolumeConfig,
|
||||
reflect.TypeOf(types.BuildConfig{}): transformBuildConfig,
|
||||
reflect.TypeOf(types.Duration(0)): transformStringToDuration,
|
||||
reflect.TypeFor[types.External](): transformExternal,
|
||||
reflect.TypeFor[types.HealthCheckTest](): transformHealthCheckTest,
|
||||
reflect.TypeFor[types.ShellCommand](): transformShellCommand,
|
||||
reflect.TypeFor[types.StringList](): transformStringList,
|
||||
reflect.TypeFor[map[string]string](): transformMapStringString,
|
||||
reflect.TypeFor[types.UlimitsConfig](): transformUlimits,
|
||||
reflect.TypeFor[types.UnitBytes](): transformSize,
|
||||
reflect.TypeFor[[]types.ServicePortConfig](): transformServicePort,
|
||||
reflect.TypeFor[types.ServiceSecretConfig](): transformStringSourceMap,
|
||||
reflect.TypeFor[types.ServiceConfigObjConfig](): transformStringSourceMap,
|
||||
reflect.TypeFor[types.StringOrNumberList](): transformStringOrNumberList,
|
||||
reflect.TypeFor[map[string]*types.ServiceNetworkConfig](): transformServiceNetworkMap,
|
||||
reflect.TypeFor[types.Mapping](): transformMappingOrListFunc("=", false),
|
||||
reflect.TypeFor[types.MappingWithEquals](): transformMappingOrListFunc("=", true),
|
||||
reflect.TypeFor[types.Labels](): transformMappingOrListFunc("=", false),
|
||||
reflect.TypeFor[types.MappingWithColon](): transformMappingOrListFunc(":", false),
|
||||
reflect.TypeFor[types.HostsList](): transformHostsList,
|
||||
reflect.TypeFor[types.ServiceVolumeConfig](): transformServiceVolumeConfig,
|
||||
reflect.TypeFor[types.BuildConfig](): transformBuildConfig,
|
||||
reflect.TypeFor[types.Duration](): transformStringToDuration,
|
||||
}
|
||||
|
||||
for _, transformer := range additionalTransformers {
|
||||
|
||||
@@ -56,15 +56,15 @@ func mergeServices(base, override []types.ServiceConfig) ([]types.ServiceConfig,
|
||||
overrideServices := mapByName(override)
|
||||
specials := &specials{
|
||||
m: map[reflect.Type]func(dst, src reflect.Value) error{
|
||||
reflect.TypeOf(&types.LoggingConfig{}): safelyMerge(mergeLoggingConfig),
|
||||
reflect.TypeOf([]types.ServicePortConfig{}): mergeSlice(toServicePortConfigsMap, toServicePortConfigsSlice),
|
||||
reflect.TypeOf([]types.ServiceSecretConfig{}): mergeSlice(toServiceSecretConfigsMap, toServiceSecretConfigsSlice),
|
||||
reflect.TypeOf([]types.ServiceConfigObjConfig{}): mergeSlice(toServiceConfigObjConfigsMap, toSServiceConfigObjConfigsSlice),
|
||||
reflect.TypeOf(&types.UlimitsConfig{}): mergeUlimitsConfig,
|
||||
reflect.TypeOf([]types.ServiceVolumeConfig{}): mergeSlice(toServiceVolumeConfigsMap, toServiceVolumeConfigsSlice),
|
||||
reflect.TypeOf(types.ShellCommand{}): mergeShellCommand,
|
||||
reflect.TypeOf(&types.ServiceNetworkConfig{}): mergeServiceNetworkConfig,
|
||||
reflect.PointerTo(reflect.TypeOf(uint64(1))): mergeUint64,
|
||||
reflect.PointerTo(reflect.TypeFor[types.LoggingConfig]()): safelyMerge(mergeLoggingConfig),
|
||||
reflect.TypeFor[[]types.ServicePortConfig](): mergeSlice(toServicePortConfigsMap, toServicePortConfigsSlice),
|
||||
reflect.TypeFor[[]types.ServiceSecretConfig](): mergeSlice(toServiceSecretConfigsMap, toServiceSecretConfigsSlice),
|
||||
reflect.TypeFor[[]types.ServiceConfigObjConfig](): mergeSlice(toServiceConfigObjConfigsMap, toSServiceConfigObjConfigsSlice),
|
||||
reflect.PointerTo(reflect.TypeFor[types.UlimitsConfig]()): mergeUlimitsConfig,
|
||||
reflect.TypeFor[[]types.ServiceVolumeConfig](): mergeSlice(toServiceVolumeConfigsMap, toServiceVolumeConfigsSlice),
|
||||
reflect.TypeFor[types.ShellCommand](): mergeShellCommand,
|
||||
reflect.PointerTo(reflect.TypeFor[types.ServiceNetworkConfig]()): mergeServiceNetworkConfig,
|
||||
reflect.PointerTo(reflect.TypeFor[uint64]()): mergeUint64,
|
||||
},
|
||||
}
|
||||
for name, overrideService := range overrideServices {
|
||||
@@ -77,7 +77,7 @@ func mergeServices(base, override []types.ServiceConfig) ([]types.ServiceConfig,
|
||||
}
|
||||
baseServices[name] = overrideService
|
||||
}
|
||||
services := []types.ServiceConfig{}
|
||||
services := make([]types.ServiceConfig, 0, len(baseServices))
|
||||
for _, baseService := range baseServices {
|
||||
services = append(services, baseService)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user