Skip to content

Commit

Permalink
Upgrade Smithy to 1.49 (#3662)
Browse files Browse the repository at this point in the history
## 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._
  • Loading branch information
ysaito1001 authored May 24, 2024
1 parent ab74d87 commit d5ea2cd
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@
package software.amazon.smithy.rust.codegen.core.smithy.protocols.serialize

import software.amazon.smithy.aws.traits.protocols.Ec2QueryNameTrait
import software.amazon.smithy.model.shapes.CollectionShape
import software.amazon.smithy.model.shapes.MemberShape
import software.amazon.smithy.model.shapes.OperationShape
import software.amazon.smithy.model.shapes.ShapeId
import software.amazon.smithy.model.traits.XmlNameTrait
import software.amazon.smithy.rust.codegen.core.rustlang.RustWriter
import software.amazon.smithy.rust.codegen.core.rustlang.rustBlock
import software.amazon.smithy.rust.codegen.core.smithy.CodegenContext
import software.amazon.smithy.rust.codegen.core.smithy.RuntimeType
import software.amazon.smithy.rust.codegen.core.util.getTrait
Expand All @@ -32,4 +35,13 @@ class Ec2QuerySerializerGenerator(codegenContext: CodegenContext) : QuerySeriali
override fun serverErrorSerializer(shape: ShapeId): RuntimeType {
TODO("Not yet implemented")
}

override fun RustWriter.serializeCollection(
memberContext: MemberContext,
context: Context<CollectionShape>,
) {
rustBlock("if !${context.valueExpression.asRef()}.is_empty()") {
super.serializeCollectionInner(memberContext, context, this)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -282,30 +282,40 @@ abstract class QuerySerializerGenerator(private val codegenContext: CodegenConte
}
}

private fun RustWriter.serializeCollection(
protected open fun RustWriter.serializeCollection(
memberContext: MemberContext,
context: Context<CollectionShape>,
) {
val flat = memberContext.shape.isFlattened()
val memberOverride =
when (val override = context.shape.member.getTrait<XmlNameTrait>()?.value) {
null -> "None"
else -> "Some(${override.dq()})"
}
val itemName = safeName("item")
safeName("list").also { listName ->
rust("let mut $listName = ${context.writerExpression}.start_list($flat, $memberOverride);")
rustBlock("for $itemName in ${context.valueExpression.asRef()}") {
val entryName = safeName("entry")
Attribute.AllowUnusedMut.render(this)
rust("let mut $entryName = $listName.entry();")
val targetShape = model.expectShape(context.shape.member.target)
serializeMemberValue(
MemberContext(entryName, ValueExpression.Reference(itemName), context.shape.member),
targetShape,
)
serializeCollectionInner(memberContext, context, this)
}

protected fun serializeCollectionInner(
memberContext: MemberContext,
context: Context<CollectionShape>,
writer: RustWriter,
) {
writer.apply {
val flat = memberContext.shape.isFlattened()
val memberOverride =
when (val override = context.shape.member.getTrait<XmlNameTrait>()?.value) {
null -> "None"
else -> "Some(${override.dq()})"
}
val itemName = safeName("item")
safeName("list").also { listName ->
rust("let mut $listName = ${context.writerExpression}.start_list($flat, $memberOverride);")
rustBlock("for $itemName in ${context.valueExpression.asRef()}") {
val entryName = safeName("entry")
Attribute.AllowUnusedMut.render(this)
rust("let mut $entryName = $listName.entry();")
val targetShape = model.expectShape(context.shape.member.target)
serializeMemberValue(
MemberContext(entryName, ValueExpression.Reference(itemName), context.shape.member),
targetShape,
)
}
rust("$listName.finish();")
}
rust("$listName.finish();")
}
}

Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ kotlin.code.style=official

# codegen
smithyGradlePluginVersion=0.9.0
smithyVersion=1.47.0
smithyVersion=1.49.0
allowLocalDeps=false

# kotlin
Expand Down

0 comments on commit d5ea2cd

Please sign in to comment.