Skip to content

Commit 016d4c5

Browse files
authored
fix: ensure maps of enums are generated properly (#586)
Description of changes: Currently, generating Maps of Enums was error prone. Instead of generating them. With these changes, we ensure map[string]Enum are generated properly. Sample: ```golang f0valf28f0f0 := map[string]svcsdktypes.GlueRecordType{} for f0valf28f0f0key, f0valf28f0f0valiter := range f0valiter.JDBCConnectorSource.AdditionalOptions.DataTypeMapping { var f0valf28f0f0val string f0valf28f0f0val = string(*f0valf28f0f0valiter) f0valf28f0f0[f0valf28f0f0key] = svcsdktypes.GlueRecordType(f0valf28f0f0val) } ``` By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 083cc39 commit 016d4c5

File tree

3 files changed

+77
-18
lines changed

3 files changed

+77
-18
lines changed

pkg/api/legacy_io_suffix.go

+1
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ var legacyIOSuffixed = IoSuffix{
187187
"DatabaseInput": struct{}{},
188188
"PartitionInput": struct{}{},
189189
"ConnectionInput": struct{}{},
190+
"DQTransformOutput": struct{}{},
190191
},
191192

192193
"Glacier": {

pkg/generate/code/set_resource.go

+30-4
Original file line numberDiff line numberDiff line change
@@ -1988,6 +1988,28 @@ func setResourceForSlice(
19881988
elemVarName := fmt.Sprintf("%selem", targetVarName)
19891989
// for _, f0iter0 := range resp.TagSpecifications {
19901990
out += fmt.Sprintf("%sfor _, %s := range %s {\n", indent, iterVarName, sourceVarName)
1991+
if sourceShape.MemberRef.Shape.Type == "list" &&
1992+
!sourceShape.MemberRef.Shape.MemberRef.Shape.IsEnum() &&
1993+
sourceShape.MemberRef.Shape.MemberRef.Shape.Type == "string" {
1994+
out += fmt.Sprintf("%s\t%s := aws.StringSlice(%s)\n", indent, elemVarName, iterVarName)
1995+
out += fmt.Sprintf("%s\t%s = append(%s, %s)\n", indent, targetVarName, targetVarName, elemVarName)
1996+
out += fmt.Sprintf("%s}\n", indent)
1997+
return out
1998+
} else if sourceShape.MemberRef.Shape.Type == "map" &&
1999+
!sourceShape.MemberRef.Shape.ValueRef.Shape.IsEnum() &&
2000+
sourceShape.MemberRef.Shape.KeyRef.Shape.Type == "string" {
2001+
if sourceShape.MemberRef.Shape.ValueRef.Shape.Type == "string" {
2002+
out += fmt.Sprintf("%s\t%s := aws.StringMap(%s)\n", indent, elemVarName, iterVarName)
2003+
out += fmt.Sprintf("%s\t%s = append(%s, %s)\n", indent, targetVarName, targetVarName, elemVarName)
2004+
out += fmt.Sprintf("%s}\n", indent)
2005+
return out
2006+
} else if sourceShape.MemberRef.Shape.ValueRef.Shape.Type == "boolean" {
2007+
out += fmt.Sprintf("%s\t%s := aws.BoolMap(%s)\n", indent, elemVarName, iterVarName)
2008+
out += fmt.Sprintf("%s\t%s = append(%s, %s)\n", indent, targetVarName, targetVarName, elemVarName)
2009+
out += fmt.Sprintf("%s}\n", indent)
2010+
return out
2011+
}
2012+
}
19912013
// var f0elem0 string
19922014
out += varEmptyConstructorK8sType(
19932015
cfg, r,
@@ -2118,6 +2140,7 @@ func setResourceForMap(
21182140
out += fmt.Sprintf("%s}\n", indent)
21192141
return out
21202142
} else if sourceShape.ValueRef.Shape.Type == "map" &&
2143+
!sourceShape.ValueRef.Shape.ValueRef.Shape.IsEnum() &&
21212144
sourceShape.ValueRef.Shape.KeyRef.Shape.Type == "string" {
21222145
if sourceShape.ValueRef.Shape.ValueRef.Shape.Type == "string" {
21232146
out += fmt.Sprintf("%s\t%s[%s] = aws.StringMap(%s)\n", indent, targetVarName, keyVarName, valIterVarName)
@@ -2155,7 +2178,9 @@ func setResourceForMap(
21552178
case "structure", "list", "map":
21562179
break
21572180
default:
2158-
addressOfVar = "&"
2181+
if !sourceShape.ValueRef.Shape.IsEnum() {
2182+
addressOfVar = "&"
2183+
}
21592184
}
21602185
// f0[f0key] = f0val
21612186
out += fmt.Sprintf("%s\t%s[%s] = %s%s\n", indent, targetVarName, keyVarName, addressOfVar, valVarName)
@@ -2183,17 +2208,17 @@ func setResourceForScalar(
21832208
if shape.Type == "timestamp" {
21842209
setTo = "&metav1.Time{*" + sourceVar + "}"
21852210
}
2186-
2211+
21872212
targetVar = strings.TrimPrefix(targetVar, ".")
21882213
address := ""
21892214

2190-
if (shape.Type == "long" && isList) || (shape.Type == "string" && isUnion) {
2215+
if (shape.Type == "long" && isList) || (shape.Type == "string" && isUnion) {
21912216
address = "&"
21922217
}
21932218

21942219
intOrFloat := map[string]string{
21952220
"integer": "int",
2196-
"float": "float",
2221+
"float": "float",
21972222
}
21982223

21992224
targetVar = strings.TrimPrefix(targetVar, ".")
@@ -2320,6 +2345,7 @@ func setResourceAdaptPrimitiveCollection(shape *awssdkmodel.Shape, qualifiedTarg
23202345

23212346
}
23222347
} else if shape.Type == "map" &&
2348+
!shape.ValueRef.Shape.IsEnum() &&
23232349
shape.KeyRef.Shape.Type == "string" &&
23242350
(shape.ValueRef.Shape.Type == "string" || shape.ValueRef.Shape.Type == "boolean" || shape.ValueRef.Shape.Type == "long" || shape.ValueRef.Shape.Type == "double") {
23252351
if shape.ValueRef.Shape.Type == "string" {

pkg/generate/code/set_sdk.go

+46-14
Original file line numberDiff line numberDiff line change
@@ -1289,6 +1289,28 @@ func setSDKForSlice(
12891289
if targetShape.MemberRef.Shape.RealType == "union" {
12901290
targetShape.MemberRef.Shape.Type = "union"
12911291
}
1292+
if targetShape.MemberRef.Shape.Type == "list" &&
1293+
targetShape.MemberRef.Shape.MemberRef.Shape.Type == "string" &&
1294+
!targetShape.MemberRef.Shape.MemberRef.Shape.IsEnum() {
1295+
out += fmt.Sprintf("%s\t%s := aws.ToStringSlice(%s)\n", indent, elemVarName, iterVarName)
1296+
out += fmt.Sprintf("%s\t%s = append(%s, %s)\n", indent, targetVarName, targetVarName, elemVarName)
1297+
out += fmt.Sprintf("%s}\n", indent)
1298+
return out
1299+
} else if targetShape.MemberRef.Shape.Type == "map" &&
1300+
!targetShape.MemberRef.Shape.ValueRef.Shape.IsEnum() &&
1301+
targetShape.MemberRef.Shape.KeyRef.Shape.Type == "string" {
1302+
if targetShape.MemberRef.Shape.ValueRef.Shape.Type == "string" {
1303+
out += fmt.Sprintf("%s\t%s := aws.ToStringMap(%s)\n", indent, elemVarName, iterVarName)
1304+
out += fmt.Sprintf("%s\t%s = append(%s, %s)\n", indent, targetVarName, targetVarName, elemVarName)
1305+
out += fmt.Sprintf("%s}\n", indent)
1306+
return out
1307+
} else if targetShape.ValueRef.Shape.ValueRef.Shape.Type == "boolean" {
1308+
out += fmt.Sprintf("%s\t%s := aws.ToBoolMap(%s)\n", indent, elemVarName, iterVarName)
1309+
out += fmt.Sprintf("%s\t%s = append(%s, %s)\n", indent, targetVarName, targetVarName, elemVarName)
1310+
out += fmt.Sprintf("%s}\n", indent)
1311+
return out
1312+
}
1313+
}
12921314
// f0elem := string{}
12931315
out += varEmptyConstructorSDKType(
12941316
cfg, r,
@@ -1368,7 +1390,8 @@ func setSDKForMap(
13681390
out += fmt.Sprintf("%s}\n", indent)
13691391
return out
13701392
} else if targetShape.ValueRef.Shape.Type == "map" &&
1371-
targetShape.ValueRef.Shape.KeyRef.Shape.Type == "string" {
1393+
targetShape.ValueRef.Shape.KeyRef.Shape.Type == "string" &&
1394+
!targetShape.ValueRef.Shape.ValueRef.Shape.IsEnum() {
13721395
if targetShape.ValueRef.Shape.ValueRef.Shape.Type == "string" {
13731396
out += fmt.Sprintf("%s\t%s[%s] = aws.ToStringMap(%s)\n", indent, targetVarName, keyVarName, valIterVarName)
13741397
out += fmt.Sprintf("%s}\n", indent)
@@ -1394,17 +1417,22 @@ func setSDKForMap(
13941417
if targetShape.ValueRef.Shape.Type == "structure" {
13951418
containerFieldName = targetFieldName
13961419
}
1397-
out += setSDKForContainer(
1398-
cfg, r,
1399-
containerFieldName,
1400-
valVarName,
1401-
sourceFieldPath,
1402-
valIterVarName,
1403-
&targetShape.ValueRef,
1404-
false,
1405-
op,
1406-
indentLevel+1,
1407-
)
1420+
if targetShape.ValueRef.Shape.IsEnum() {
1421+
out += fmt.Sprintf("%s\t%s = string(*%s)\n", indent, valVarName, valIterVarName)
1422+
valVarName = fmt.Sprintf("svcsdktypes.%s(%s)", targetShape.ValueRef.ShapeName, valVarName)
1423+
} else {
1424+
out += setSDKForContainer(
1425+
cfg, r,
1426+
containerFieldName,
1427+
valVarName,
1428+
sourceFieldPath,
1429+
valIterVarName,
1430+
&targetShape.ValueRef,
1431+
true,
1432+
op,
1433+
indentLevel+1,
1434+
)
1435+
}
14081436

14091437
dereference := "*"
14101438
if !targetShapeRef.HasDefaultValue() && targetShape.ValueRef.Shape.Type != "structure" {
@@ -1458,6 +1486,9 @@ func varEmptyConstructorSDKType(
14581486
if goType == "map[string][]*string" || goType == "map[string][]*int32" || goType == "map[string][]*int64" {
14591487
goType = "map[string][]" + strings.TrimPrefix(goType, "map[string][]*")
14601488
}
1489+
if shape.ValueRef.Shape.IsEnum() {
1490+
goType = fmt.Sprintf("map[string]svcsdktypes.%s", shape.ValueRef.ShapeName)
1491+
}
14611492
out += fmt.Sprintf("%s%s := %s{}\n", indent, varName, goType)
14621493

14631494
default:
@@ -1636,8 +1667,9 @@ func setSDKAdaptiveResourceCollection(
16361667
out += fmt.Sprintf("%s\t%s.%s = aws.ToInt64Slice(%s)\n", indent, targetVarName, memberName, sourceAdaptedVarName)
16371668

16381669
}
1639-
} else if shape.Type == "map" &&
1670+
} else if shape.Type == "map" &&
16401671
shape.KeyRef.Shape.Type == "string" &&
1672+
!shape.ValueRef.Shape.IsEnum() &&
16411673
isPrimitiveType(shape.ValueRef.Shape.Type) {
16421674
mapType := resolveAWSMapValueType(shape.ValueRef.Shape.Type)
16431675
out += fmt.Sprintf("%s\t%s.%s = aws.To%sMap(%s)\n", indent, targetVarName, memberName, mapType, sourceAdaptedVarName)
@@ -1774,4 +1806,4 @@ func setSDKForUnion(
17741806
}
17751807

17761808
return out
1777-
}
1809+
}

0 commit comments

Comments
 (0)