diff --git a/pkg/api/legacy_io_suffix.go b/pkg/api/legacy_io_suffix.go index f2d54cec..b123a501 100644 --- a/pkg/api/legacy_io_suffix.go +++ b/pkg/api/legacy_io_suffix.go @@ -187,6 +187,7 @@ var legacyIOSuffixed = IoSuffix{ "DatabaseInput": struct{}{}, "PartitionInput": struct{}{}, "ConnectionInput": struct{}{}, + "DQTransformOutput": struct{}{}, }, "Glacier": { diff --git a/pkg/generate/code/set_resource.go b/pkg/generate/code/set_resource.go index 92649f8f..f2f73664 100644 --- a/pkg/generate/code/set_resource.go +++ b/pkg/generate/code/set_resource.go @@ -1988,6 +1988,28 @@ func setResourceForSlice( elemVarName := fmt.Sprintf("%selem", targetVarName) // for _, f0iter0 := range resp.TagSpecifications { out += fmt.Sprintf("%sfor _, %s := range %s {\n", indent, iterVarName, sourceVarName) + if sourceShape.MemberRef.Shape.Type == "list" && + !sourceShape.MemberRef.Shape.MemberRef.Shape.IsEnum() && + sourceShape.MemberRef.Shape.MemberRef.Shape.Type == "string" { + out += fmt.Sprintf("%s\t%s := aws.StringSlice(%s)\n", indent, elemVarName, iterVarName) + out += fmt.Sprintf("%s\t%s = append(%s, %s)\n", indent, targetVarName, targetVarName, elemVarName) + out += fmt.Sprintf("%s}\n", indent) + return out + } else if sourceShape.MemberRef.Shape.Type == "map" && + !sourceShape.MemberRef.Shape.ValueRef.Shape.IsEnum() && + sourceShape.MemberRef.Shape.KeyRef.Shape.Type == "string" { + if sourceShape.MemberRef.Shape.ValueRef.Shape.Type == "string" { + out += fmt.Sprintf("%s\t%s := aws.StringMap(%s)\n", indent, elemVarName, iterVarName) + out += fmt.Sprintf("%s\t%s = append(%s, %s)\n", indent, targetVarName, targetVarName, elemVarName) + out += fmt.Sprintf("%s}\n", indent) + return out + } else if sourceShape.MemberRef.Shape.ValueRef.Shape.Type == "boolean" { + out += fmt.Sprintf("%s\t%s := aws.BoolMap(%s)\n", indent, elemVarName, iterVarName) + out += fmt.Sprintf("%s\t%s = append(%s, %s)\n", indent, targetVarName, targetVarName, elemVarName) + out += fmt.Sprintf("%s}\n", indent) + return out + } + } // var f0elem0 string out += varEmptyConstructorK8sType( cfg, r, @@ -2118,6 +2140,7 @@ func setResourceForMap( out += fmt.Sprintf("%s}\n", indent) return out } else if sourceShape.ValueRef.Shape.Type == "map" && + !sourceShape.ValueRef.Shape.ValueRef.Shape.IsEnum() && sourceShape.ValueRef.Shape.KeyRef.Shape.Type == "string" { if sourceShape.ValueRef.Shape.ValueRef.Shape.Type == "string" { out += fmt.Sprintf("%s\t%s[%s] = aws.StringMap(%s)\n", indent, targetVarName, keyVarName, valIterVarName) @@ -2155,7 +2178,9 @@ func setResourceForMap( case "structure", "list", "map": break default: - addressOfVar = "&" + if !sourceShape.ValueRef.Shape.IsEnum() { + addressOfVar = "&" + } } // f0[f0key] = f0val out += fmt.Sprintf("%s\t%s[%s] = %s%s\n", indent, targetVarName, keyVarName, addressOfVar, valVarName) @@ -2183,17 +2208,17 @@ func setResourceForScalar( if shape.Type == "timestamp" { setTo = "&metav1.Time{*" + sourceVar + "}" } - + targetVar = strings.TrimPrefix(targetVar, ".") address := "" - if (shape.Type == "long" && isList) || (shape.Type == "string" && isUnion) { + if (shape.Type == "long" && isList) || (shape.Type == "string" && isUnion) { address = "&" } intOrFloat := map[string]string{ "integer": "int", - "float": "float", + "float": "float", } targetVar = strings.TrimPrefix(targetVar, ".") @@ -2320,6 +2345,7 @@ func setResourceAdaptPrimitiveCollection(shape *awssdkmodel.Shape, qualifiedTarg } } else if shape.Type == "map" && + !shape.ValueRef.Shape.IsEnum() && shape.KeyRef.Shape.Type == "string" && (shape.ValueRef.Shape.Type == "string" || shape.ValueRef.Shape.Type == "boolean" || shape.ValueRef.Shape.Type == "long" || shape.ValueRef.Shape.Type == "double") { if shape.ValueRef.Shape.Type == "string" { diff --git a/pkg/generate/code/set_sdk.go b/pkg/generate/code/set_sdk.go index e3d06c8f..eae16d4a 100644 --- a/pkg/generate/code/set_sdk.go +++ b/pkg/generate/code/set_sdk.go @@ -1289,6 +1289,28 @@ func setSDKForSlice( if targetShape.MemberRef.Shape.RealType == "union" { targetShape.MemberRef.Shape.Type = "union" } + if targetShape.MemberRef.Shape.Type == "list" && + targetShape.MemberRef.Shape.MemberRef.Shape.Type == "string" && + !targetShape.MemberRef.Shape.MemberRef.Shape.IsEnum() { + out += fmt.Sprintf("%s\t%s := aws.ToStringSlice(%s)\n", indent, elemVarName, iterVarName) + out += fmt.Sprintf("%s\t%s = append(%s, %s)\n", indent, targetVarName, targetVarName, elemVarName) + out += fmt.Sprintf("%s}\n", indent) + return out + } else if targetShape.MemberRef.Shape.Type == "map" && + !targetShape.MemberRef.Shape.ValueRef.Shape.IsEnum() && + targetShape.MemberRef.Shape.KeyRef.Shape.Type == "string" { + if targetShape.MemberRef.Shape.ValueRef.Shape.Type == "string" { + out += fmt.Sprintf("%s\t%s := aws.ToStringMap(%s)\n", indent, elemVarName, iterVarName) + out += fmt.Sprintf("%s\t%s = append(%s, %s)\n", indent, targetVarName, targetVarName, elemVarName) + out += fmt.Sprintf("%s}\n", indent) + return out + } else if targetShape.ValueRef.Shape.ValueRef.Shape.Type == "boolean" { + out += fmt.Sprintf("%s\t%s := aws.ToBoolMap(%s)\n", indent, elemVarName, iterVarName) + out += fmt.Sprintf("%s\t%s = append(%s, %s)\n", indent, targetVarName, targetVarName, elemVarName) + out += fmt.Sprintf("%s}\n", indent) + return out + } + } // f0elem := string{} out += varEmptyConstructorSDKType( cfg, r, @@ -1368,7 +1390,8 @@ func setSDKForMap( out += fmt.Sprintf("%s}\n", indent) return out } else if targetShape.ValueRef.Shape.Type == "map" && - targetShape.ValueRef.Shape.KeyRef.Shape.Type == "string" { + targetShape.ValueRef.Shape.KeyRef.Shape.Type == "string" && + !targetShape.ValueRef.Shape.ValueRef.Shape.IsEnum() { if targetShape.ValueRef.Shape.ValueRef.Shape.Type == "string" { out += fmt.Sprintf("%s\t%s[%s] = aws.ToStringMap(%s)\n", indent, targetVarName, keyVarName, valIterVarName) out += fmt.Sprintf("%s}\n", indent) @@ -1394,17 +1417,22 @@ func setSDKForMap( if targetShape.ValueRef.Shape.Type == "structure" { containerFieldName = targetFieldName } - out += setSDKForContainer( - cfg, r, - containerFieldName, - valVarName, - sourceFieldPath, - valIterVarName, - &targetShape.ValueRef, - false, - op, - indentLevel+1, - ) + if targetShape.ValueRef.Shape.IsEnum() { + out += fmt.Sprintf("%s\t%s = string(*%s)\n", indent, valVarName, valIterVarName) + valVarName = fmt.Sprintf("svcsdktypes.%s(%s)", targetShape.ValueRef.ShapeName, valVarName) + } else { + out += setSDKForContainer( + cfg, r, + containerFieldName, + valVarName, + sourceFieldPath, + valIterVarName, + &targetShape.ValueRef, + true, + op, + indentLevel+1, + ) + } dereference := "*" if !targetShapeRef.HasDefaultValue() && targetShape.ValueRef.Shape.Type != "structure" { @@ -1458,6 +1486,9 @@ func varEmptyConstructorSDKType( if goType == "map[string][]*string" || goType == "map[string][]*int32" || goType == "map[string][]*int64" { goType = "map[string][]" + strings.TrimPrefix(goType, "map[string][]*") } + if shape.ValueRef.Shape.IsEnum() { + goType = fmt.Sprintf("map[string]svcsdktypes.%s", shape.ValueRef.ShapeName) + } out += fmt.Sprintf("%s%s := %s{}\n", indent, varName, goType) default: @@ -1636,8 +1667,9 @@ func setSDKAdaptiveResourceCollection( out += fmt.Sprintf("%s\t%s.%s = aws.ToInt64Slice(%s)\n", indent, targetVarName, memberName, sourceAdaptedVarName) } - } else if shape.Type == "map" && + } else if shape.Type == "map" && shape.KeyRef.Shape.Type == "string" && + !shape.ValueRef.Shape.IsEnum() && isPrimitiveType(shape.ValueRef.Shape.Type) { mapType := resolveAWSMapValueType(shape.ValueRef.Shape.Type) out += fmt.Sprintf("%s\t%s.%s = aws.To%sMap(%s)\n", indent, targetVarName, memberName, mapType, sourceAdaptedVarName) @@ -1774,4 +1806,4 @@ func setSDKForUnion( } return out -} \ No newline at end of file +}