Skip to content

Commit 8319894

Browse files
sichanyooSichan Yoojbelkins
authored
fix: Enable EC2 query empty list protocol test (#794)
* Add fix for list member serialization in EC2 query protocol. * Update codegen test --------- Co-authored-by: Sichan Yoo <[email protected]> Co-authored-by: Josh Elkins <[email protected]>
1 parent 4f139ad commit 8319894

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

smithy-swift-codegen/src/main/kotlin/software/amazon/smithy/swift/codegen/integration/serde/member/MemberShapeEncodeGenerator.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,12 @@ abstract class MemberShapeEncodeGenerator(
104104
val listKey = nodeInfoUtils.nodeInfo(member)
105105
val isFlattened = member.hasTrait<XmlFlattenedTrait>() || ctx.service.awsProtocol == AWSProtocol.EC2_QUERY
106106
val memberNodeInfo = nodeInfoUtils.nodeInfo(listShape.member)
107+
// AWS Query protocol keeps a list member in the request even if it is empty, e.g., List=&Version=2020-01-08
108+
// EC2 Query protocol leaves out a list member from the request if it is empty, e.g., Version=2020-01-08
109+
if (ctx.service.awsProtocol == AWSProtocol.EC2_QUERY) {
110+
writer.write("if !(\$L\$L?.isEmpty ?? true) {", prefix, memberName)
111+
writer.indent()
112+
}
107113
writer.write(
108114
"try writer[\$L].writeList(\$L\$L, memberWritingClosure: \$L, memberNodeInfo: \$L, isFlattened: \$L)",
109115
listKey,
@@ -113,6 +119,10 @@ abstract class MemberShapeEncodeGenerator(
113119
memberNodeInfo,
114120
isFlattened
115121
)
122+
if (ctx.service.awsProtocol == AWSProtocol.EC2_QUERY) {
123+
writer.dedent()
124+
writer.write("}")
125+
}
116126
}
117127

118128
private fun writeMapMember(member: MemberShape, mapShape: MapShape, prefix: String, isSparse: Boolean) {

smithy-swift-codegen/src/test/kotlin/serde/ec2/OnlyFlattenedListEncodeFormURLGeneratorTests.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,18 @@ extension Ec2QueryListsInput {
2525
2626
static func write(value: Ec2QueryListsInput?, to writer: SmithyFormURL.Writer) throws {
2727
guard let value else { return }
28-
try writer["ComplexListArg"].writeList(value.complexListArg, memberWritingClosure: Ec2queryprotocolClientTypes.GreetingStruct.write(value:to:), memberNodeInfo: "Member", isFlattened: true)
29-
try writer["ListArg"].writeList(value.listArg, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "Member", isFlattened: true)
30-
try writer["Hi"].writeList(value.listArgWithXmlName, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "Item", isFlattened: true)
31-
try writer["ListArgWithXmlNameMember"].writeList(value.listArgWithXmlNameMember, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "Item", isFlattened: true)
28+
if !(value.complexListArg?.isEmpty ?? true) {
29+
try writer["ComplexListArg"].writeList(value.complexListArg, memberWritingClosure: Ec2queryprotocolClientTypes.GreetingStruct.write(value:to:), memberNodeInfo: "Member", isFlattened: true)
30+
}
31+
if !(value.listArg?.isEmpty ?? true) {
32+
try writer["ListArg"].writeList(value.listArg, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "Member", isFlattened: true)
33+
}
34+
if !(value.listArgWithXmlName?.isEmpty ?? true) {
35+
try writer["Hi"].writeList(value.listArgWithXmlName, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "Item", isFlattened: true)
36+
}
37+
if !(value.listArgWithXmlNameMember?.isEmpty ?? true) {
38+
try writer["ListArgWithXmlNameMember"].writeList(value.listArgWithXmlNameMember, memberWritingClosure: SmithyReadWrite.WritingClosures.writeString(value:to:), memberNodeInfo: "Item", isFlattened: true)
39+
}
3240
try writer["Action"].write("Ec2QueryLists")
3341
try writer["Version"].write("2020-01-08")
3442
}

0 commit comments

Comments
 (0)