Skip to content

Commit d5ea2cd

Browse files
authored
Upgrade Smithy to 1.49 (smithy-lang#3662)
## Motivation and Context Upgrades Smithy to 1.49.0 ## Description As part of the upgrade, it updates the serializer for EC2 query protocol to handle empty lists in response to [this](smithy-lang/smithy#2269) (otherwise [a protocol test](https://github.com/smithy-lang/smithy-rs/blob/main/codegen-client-test/build.gradle.kts#L75) `ec2_empty_query_lists_request` would fail). ## Testing Existing tests in CI ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._
1 parent ab74d87 commit d5ea2cd

File tree

3 files changed

+43
-21
lines changed

3 files changed

+43
-21
lines changed

codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/Ec2QuerySerializerGenerator.kt

+12
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@
66
package software.amazon.smithy.rust.codegen.core.smithy.protocols.serialize
77

88
import software.amazon.smithy.aws.traits.protocols.Ec2QueryNameTrait
9+
import software.amazon.smithy.model.shapes.CollectionShape
910
import software.amazon.smithy.model.shapes.MemberShape
1011
import software.amazon.smithy.model.shapes.OperationShape
1112
import software.amazon.smithy.model.shapes.ShapeId
1213
import software.amazon.smithy.model.traits.XmlNameTrait
14+
import software.amazon.smithy.rust.codegen.core.rustlang.RustWriter
15+
import software.amazon.smithy.rust.codegen.core.rustlang.rustBlock
1316
import software.amazon.smithy.rust.codegen.core.smithy.CodegenContext
1417
import software.amazon.smithy.rust.codegen.core.smithy.RuntimeType
1518
import software.amazon.smithy.rust.codegen.core.util.getTrait
@@ -32,4 +35,13 @@ class Ec2QuerySerializerGenerator(codegenContext: CodegenContext) : QuerySeriali
3235
override fun serverErrorSerializer(shape: ShapeId): RuntimeType {
3336
TODO("Not yet implemented")
3437
}
38+
39+
override fun RustWriter.serializeCollection(
40+
memberContext: MemberContext,
41+
context: Context<CollectionShape>,
42+
) {
43+
rustBlock("if !${context.valueExpression.asRef()}.is_empty()") {
44+
super.serializeCollectionInner(memberContext, context, this)
45+
}
46+
}
3547
}

codegen-core/src/main/kotlin/software/amazon/smithy/rust/codegen/core/smithy/protocols/serialize/QuerySerializerGenerator.kt

+30-20
Original file line numberDiff line numberDiff line change
@@ -282,30 +282,40 @@ abstract class QuerySerializerGenerator(private val codegenContext: CodegenConte
282282
}
283283
}
284284

285-
private fun RustWriter.serializeCollection(
285+
protected open fun RustWriter.serializeCollection(
286286
memberContext: MemberContext,
287287
context: Context<CollectionShape>,
288288
) {
289-
val flat = memberContext.shape.isFlattened()
290-
val memberOverride =
291-
when (val override = context.shape.member.getTrait<XmlNameTrait>()?.value) {
292-
null -> "None"
293-
else -> "Some(${override.dq()})"
294-
}
295-
val itemName = safeName("item")
296-
safeName("list").also { listName ->
297-
rust("let mut $listName = ${context.writerExpression}.start_list($flat, $memberOverride);")
298-
rustBlock("for $itemName in ${context.valueExpression.asRef()}") {
299-
val entryName = safeName("entry")
300-
Attribute.AllowUnusedMut.render(this)
301-
rust("let mut $entryName = $listName.entry();")
302-
val targetShape = model.expectShape(context.shape.member.target)
303-
serializeMemberValue(
304-
MemberContext(entryName, ValueExpression.Reference(itemName), context.shape.member),
305-
targetShape,
306-
)
289+
serializeCollectionInner(memberContext, context, this)
290+
}
291+
292+
protected fun serializeCollectionInner(
293+
memberContext: MemberContext,
294+
context: Context<CollectionShape>,
295+
writer: RustWriter,
296+
) {
297+
writer.apply {
298+
val flat = memberContext.shape.isFlattened()
299+
val memberOverride =
300+
when (val override = context.shape.member.getTrait<XmlNameTrait>()?.value) {
301+
null -> "None"
302+
else -> "Some(${override.dq()})"
303+
}
304+
val itemName = safeName("item")
305+
safeName("list").also { listName ->
306+
rust("let mut $listName = ${context.writerExpression}.start_list($flat, $memberOverride);")
307+
rustBlock("for $itemName in ${context.valueExpression.asRef()}") {
308+
val entryName = safeName("entry")
309+
Attribute.AllowUnusedMut.render(this)
310+
rust("let mut $entryName = $listName.entry();")
311+
val targetShape = model.expectShape(context.shape.member.target)
312+
serializeMemberValue(
313+
MemberContext(entryName, ValueExpression.Reference(itemName), context.shape.member),
314+
targetShape,
315+
)
316+
}
317+
rust("$listName.finish();")
307318
}
308-
rust("$listName.finish();")
309319
}
310320
}
311321

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ kotlin.code.style=official
2121

2222
# codegen
2323
smithyGradlePluginVersion=0.9.0
24-
smithyVersion=1.47.0
24+
smithyVersion=1.49.0
2525
allowLocalDeps=false
2626

2727
# kotlin

0 commit comments

Comments
 (0)