in codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/RestXml.kt [127:155]
override fun renderDeserializeOperationBody(
ctx: ProtocolGenerator.GenerationContext,
op: OperationShape,
writer: KotlinWriter
) {
writer.addImport(RuntimeTypes.Serde.SerdeXml.XmlDeserializer)
writer.write("val deserializer = #T(payload)", RuntimeTypes.Serde.SerdeXml.XmlDeserializer)
val resolver = getProtocolHttpBindingResolver(ctx.model, ctx.service)
val responseBindings = resolver.responseBindings(op)
val documentMembers = responseBindings.filterDocumentBoundMembers()
val shape = ctx.model.expectShape(op.output.get())
val httpPayload = responseBindings.firstOrNull { it.location == HttpBinding.Location.PAYLOAD }
if (httpPayload != null) {
// explicitly bound member
val member = httpPayload.member
if (member.hasTrait<XmlNameTrait>()) {
// can't delegate, have to generate a dedicated deserializer inline
renderDeserializeExplicitBoundStructure(ctx, member, writer)
} else {
// we can re-use the document deserializer
val memberSymbol = ctx.symbolProvider.toSymbol(member)
writer.write("builder.${member.defaultName()} = #L(deserializer)", memberSymbol.documentDeserializerName())
}
} else {
renderDeserializerBody(ctx, shape, documentMembers, writer)
}
}