diff --git a/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/RestXml.kt b/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/RestXml.kt index 7d38aeeeb36..e14443dd118 100644 --- a/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/RestXml.kt +++ b/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/RestXml.kt @@ -62,13 +62,13 @@ class RestXmlParserGenerator( writer: KotlinWriter ): XmlSerdeDescriptorGenerator = RestXmlSerdeDescriptorGenerator(ctx.toRenderingContext(protocolGenerator, shape, writer), members) - override fun payloadDeserializer(ctx: ProtocolGenerator.GenerationContext, member: MemberShape): Symbol { - return if (member.hasTrait()) { + override fun payloadDeserializer(ctx: ProtocolGenerator.GenerationContext, shape: Shape): Symbol { + return if (shape.hasTrait() && shape is MemberShape) { // can't delegate, have to generate a dedicated deserializer because the member xml name is different // from the name of the target shape - explicitBoundStructureDeserializer(ctx, member) + explicitBoundStructureDeserializer(ctx, shape) } else { - super.payloadDeserializer(ctx, member) + super.payloadDeserializer(ctx, shape) } } @@ -116,13 +116,13 @@ class RestXmlSerializerGenerator( writer: KotlinWriter ): XmlSerdeDescriptorGenerator = RestXmlSerdeDescriptorGenerator(ctx.toRenderingContext(protocolGenerator, shape, writer), members) - override fun payloadSerializer(ctx: ProtocolGenerator.GenerationContext, member: MemberShape): Symbol { - return if (member.hasTrait()) { + override fun payloadSerializer(ctx: ProtocolGenerator.GenerationContext, shape: Shape): Symbol { + return if (shape.hasTrait() && shape is MemberShape) { // can't delegate, have to generate a dedicated serializer because the member xml name is different // from the name of the target shape - explicitBoundStructureSerializer(ctx, member) + explicitBoundStructureSerializer(ctx, shape) } else { - super.payloadSerializer(ctx, member) + super.payloadSerializer(ctx, shape) } } diff --git a/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/core/QueryHttpBindingProtocolGenerator.kt b/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/core/QueryHttpBindingProtocolGenerator.kt index b77e6f422eb..02805326b28 100644 --- a/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/core/QueryHttpBindingProtocolGenerator.kt +++ b/codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/core/QueryHttpBindingProtocolGenerator.kt @@ -7,6 +7,7 @@ import software.amazon.smithy.kotlin.codegen.core.RuntimeTypes import software.amazon.smithy.kotlin.codegen.core.withBlock import software.amazon.smithy.kotlin.codegen.model.expectShape import software.amazon.smithy.kotlin.codegen.model.knowledge.SerdeIndex +import software.amazon.smithy.kotlin.codegen.model.targetOrSelf import software.amazon.smithy.kotlin.codegen.rendering.protocol.HttpBindingResolver import software.amazon.smithy.kotlin.codegen.rendering.protocol.ProtocolGenerator import software.amazon.smithy.kotlin.codegen.rendering.protocol.ProtocolMiddleware @@ -158,10 +159,10 @@ abstract class AbstractQueryFormUrlSerializerGenerator( } } - override fun payloadSerializer(ctx: ProtocolGenerator.GenerationContext, member: MemberShape): Symbol { + override fun payloadSerializer(ctx: ProtocolGenerator.GenerationContext, shape: Shape): Symbol { // re-use document serializer (for the target shape!) - val target = ctx.model.expectShape(member.target) - val symbol = ctx.symbolProvider.toSymbol(member) + val target = shape.targetOrSelf(ctx.model) + val symbol = ctx.symbolProvider.toSymbol(shape) val serializeFn = documentSerializer(ctx, target) val fnName = symbol.payloadSerializerName() return symbol.payloadSerializer(ctx.settings) { writer -> diff --git a/codegen/smithy-aws-kotlin-codegen/src/test/kotlin/aws/sdk/kotlin/codegen/protocols/core/AwsHttpBindingProtocolGeneratorTest.kt b/codegen/smithy-aws-kotlin-codegen/src/test/kotlin/aws/sdk/kotlin/codegen/protocols/core/AwsHttpBindingProtocolGeneratorTest.kt index 36540a8727f..68d95ac4480 100644 --- a/codegen/smithy-aws-kotlin-codegen/src/test/kotlin/aws/sdk/kotlin/codegen/protocols/core/AwsHttpBindingProtocolGeneratorTest.kt +++ b/codegen/smithy-aws-kotlin-codegen/src/test/kotlin/aws/sdk/kotlin/codegen/protocols/core/AwsHttpBindingProtocolGeneratorTest.kt @@ -101,7 +101,7 @@ class AwsHttpBindingProtocolGeneratorTest { error("Unneeded for test") } - override fun payloadDeserializer(ctx: ProtocolGenerator.GenerationContext, member: MemberShape): Symbol { + override fun payloadDeserializer(ctx: ProtocolGenerator.GenerationContext, shape: Shape): Symbol { error("Unneeded for test") } } @@ -112,7 +112,7 @@ class AwsHttpBindingProtocolGeneratorTest { error("Unneeded for test") } - override fun payloadSerializer(ctx: ProtocolGenerator.GenerationContext, member: MemberShape): Symbol { + override fun payloadSerializer(ctx: ProtocolGenerator.GenerationContext, shape: Shape): Symbol { error("Unneeded for test") } }