@@ -28,15 +28,12 @@ import (
2828 "regexp"
2929 "strconv"
3030 "strings"
31- "time"
3231
3332 "github.com/compose-spec/compose-go/consts"
3433 interp "github.com/compose-spec/compose-go/interpolation"
3534 "github.com/compose-spec/compose-go/schema"
3635 "github.com/compose-spec/compose-go/template"
3736 "github.com/compose-spec/compose-go/types"
38- "github.com/docker/go-units"
39- "github.com/mattn/go-shellwords"
4037 "github.com/mitchellh/mapstructure"
4138 "github.com/pkg/errors"
4239 "github.com/sirupsen/logrus"
@@ -586,7 +583,7 @@ func Transform(source interface{}, target interface{}, additionalTransformers ..
586583 config := & mapstructure.DecoderConfig {
587584 DecodeHook : mapstructure .ComposeDecodeHookFunc (
588585 createTransformHook (additionalTransformers ... ),
589- mapstructure . StringToTimeDurationHookFunc () ),
586+ decoderHook ),
590587 Result : target ,
591588 TagName : "yaml" ,
592589 Metadata : & data ,
@@ -610,28 +607,20 @@ type Transformer struct {
610607func createTransformHook (additionalTransformers ... Transformer ) mapstructure.DecodeHookFuncType {
611608 transforms := map [reflect.Type ]func (interface {}) (interface {}, error ){
612609 reflect .TypeOf (types.External {}): transformExternal ,
613- reflect .TypeOf (types.HealthCheckTest {}): transformHealthCheckTest ,
614- reflect .TypeOf (types.ShellCommand {}): transformShellCommand ,
615- reflect .TypeOf (types.StringList {}): transformStringList ,
616- reflect .TypeOf (types.Options {}): transformMapStringString ,
610+ reflect .TypeOf (types.Options {}): transformOptions ,
617611 reflect .TypeOf (types.UlimitsConfig {}): transformUlimits ,
618- reflect .TypeOf (types .UnitBytes (0 )): transformSize ,
619612 reflect .TypeOf ([]types.ServicePortConfig {}): transformServicePort ,
620613 reflect .TypeOf (types.ServiceSecretConfig {}): transformFileReferenceConfig ,
621614 reflect .TypeOf (types.ServiceConfigObjConfig {}): transformFileReferenceConfig ,
622- reflect .TypeOf (types.StringOrNumberList {}): transformStringOrNumberList ,
623615 reflect .TypeOf (map [string ]* types.ServiceNetworkConfig {}): transformServiceNetworkMap ,
624616 reflect .TypeOf (types.Mapping {}): transformMappingOrListFunc ("=" , false ),
625617 reflect .TypeOf (types.MappingWithEquals {}): transformMappingOrListFunc ("=" , true ),
626- reflect .TypeOf (types.Labels {}): transformMappingOrListFunc ("=" , false ),
627618 reflect .TypeOf (types.MappingWithColon {}): transformMappingOrListFunc (":" , false ),
628619 reflect .TypeOf (types.HostsList {}): transformMappingOrListFunc (":" , false ),
629620 reflect .TypeOf (types.ServiceVolumeConfig {}): transformServiceVolumeConfig ,
630621 reflect .TypeOf (types.BuildConfig {}): transformBuildConfig ,
631- reflect .TypeOf (types .Duration (0 )): transformStringToDuration ,
632622 reflect .TypeOf (types.DependsOnConfig {}): transformDependsOnConfig ,
633623 reflect .TypeOf (types.ExtendsConfig {}): transformExtendsConfig ,
634- reflect .TypeOf (types.DeviceRequest {}): transformServiceDeviceRequest ,
635624 reflect .TypeOf (types.SSHConfig {}): transformSSHConfig ,
636625 reflect .TypeOf (types.IncludeConfig {}): transformIncludeConfig ,
637626 }
@@ -1031,7 +1020,7 @@ func loadFileObjectConfig(name string, objType string, obj types.FileObjectConfi
10311020 return obj , nil
10321021}
10331022
1034- var transformMapStringString TransformerFunc = func (data interface {}) (interface {}, error ) {
1023+ var transformOptions TransformerFunc = func (data interface {}) (interface {}, error ) {
10351024 switch value := data .(type ) {
10361025 case map [string ]interface {}:
10371026 return toMapStringString (value , false ), nil
@@ -1094,35 +1083,6 @@ var transformServicePort TransformerFunc = func(data interface{}) (interface{},
10941083 }
10951084}
10961085
1097- var transformServiceDeviceRequest TransformerFunc = func (data interface {}) (interface {}, error ) {
1098- switch value := data .(type ) {
1099- case map [string ]interface {}:
1100- count , ok := value ["count" ]
1101- if ok {
1102- switch val := count .(type ) {
1103- case int :
1104- return value , nil
1105- case string :
1106- if strings .ToLower (val ) == "all" {
1107- value ["count" ] = - 1
1108- return value , nil
1109- }
1110- i , err := strconv .ParseInt (val , 10 , 64 )
1111- if err == nil {
1112- value ["count" ] = i
1113- return value , nil
1114- }
1115- return data , errors .Errorf ("invalid string value for 'count' (the only value allowed is 'all' or a number)" )
1116- default :
1117- return data , errors .Errorf ("invalid type %T for device count" , val )
1118- }
1119- }
1120- return data , nil
1121- default :
1122- return data , errors .Errorf ("invalid type %T for resource reservation" , value )
1123- }
1124- }
1125-
11261086var transformFileReferenceConfig TransformerFunc = func (data interface {}) (interface {}, error ) {
11271087 switch value := data .(type ) {
11281088 case string :
@@ -1258,26 +1218,6 @@ func ParseShortSSHSyntax(value string) ([]types.SSHKey, error) {
12581218 return result , nil
12591219}
12601220
1261- var transformStringOrNumberList TransformerFunc = func (value interface {}) (interface {}, error ) {
1262- list := value .([]interface {})
1263- result := make ([]string , len (list ))
1264- for i , item := range list {
1265- result [i ] = fmt .Sprint (item )
1266- }
1267- return result , nil
1268- }
1269-
1270- var transformStringList TransformerFunc = func (data interface {}) (interface {}, error ) {
1271- switch value := data .(type ) {
1272- case string :
1273- return []string {value }, nil
1274- case []interface {}:
1275- return value , nil
1276- default :
1277- return data , errors .Errorf ("invalid type %T for string list" , value )
1278- }
1279- }
1280-
12811221func transformMappingOrListFunc (sep string , allowNil bool ) TransformerFunc {
12821222 return func (data interface {}) (interface {}, error ) {
12831223 return transformMappingOrList (data , sep , allowNil )
@@ -1312,52 +1252,6 @@ func transformValueToMapEntry(value string, separator string, allowNil bool) (st
13121252 }
13131253}
13141254
1315- var transformShellCommand TransformerFunc = func (value interface {}) (interface {}, error ) {
1316- if str , ok := value .(string ); ok {
1317- return shellwords .Parse (str )
1318- }
1319- return value , nil
1320- }
1321-
1322- var transformHealthCheckTest TransformerFunc = func (data interface {}) (interface {}, error ) {
1323- switch value := data .(type ) {
1324- case string :
1325- return append ([]string {"CMD-SHELL" }, value ), nil
1326- case []interface {}:
1327- return value , nil
1328- default :
1329- return value , errors .Errorf ("invalid type %T for healthcheck.test" , value )
1330- }
1331- }
1332-
1333- var transformSize TransformerFunc = func (value interface {}) (interface {}, error ) {
1334- switch value := value .(type ) {
1335- case int :
1336- return int64 (value ), nil
1337- case int64 , types.UnitBytes :
1338- return value , nil
1339- case string :
1340- return units .RAMInBytes (value )
1341- default :
1342- return value , errors .Errorf ("invalid type for size %T" , value )
1343- }
1344- }
1345-
1346- var transformStringToDuration TransformerFunc = func (value interface {}) (interface {}, error ) {
1347- switch value := value .(type ) {
1348- case string :
1349- d , err := time .ParseDuration (value )
1350- if err != nil {
1351- return value , err
1352- }
1353- return types .Duration (d ), nil
1354- case types.Duration :
1355- return value , nil
1356- default :
1357- return value , errors .Errorf ("invalid type %T for duration" , value )
1358- }
1359- }
1360-
13611255func toMapStringString (value map [string ]interface {}, allowNil bool ) map [string ]interface {} {
13621256 output := make (map [string ]interface {})
13631257 for key , value := range value {
0 commit comments