override fun renderDeserializeOperationBody()

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)
        }
    }