override fun renderSerializeOperationBody()

in codegen/smithy-aws-kotlin-codegen/src/main/kotlin/aws/sdk/kotlin/codegen/protocols/RestXml.kt [54:84]


    override fun renderSerializeOperationBody(
        ctx: ProtocolGenerator.GenerationContext,
        op: OperationShape,
        writer: KotlinWriter
    ) {
        val resolver = getProtocolHttpBindingResolver(ctx.model, ctx.service)
        val requestBindings = resolver.requestBindings(op)
        val documentMembers = requestBindings.filterDocumentBoundMembers()
        val shape = ctx.model.expectShape(op.input.get())

        writer.addImport(RuntimeTypes.Serde.SerdeXml.XmlSerializer)
        writer.write("val serializer = #T()", RuntimeTypes.Serde.SerdeXml.XmlSerializer)

        val httpPayload = requestBindings.firstOrNull { it.location == HttpBinding.Location.PAYLOAD }
        if (httpPayload != null) {
            // explicitly bound member
            val member = httpPayload.member
            if (member.hasTrait<XmlNameTrait>()) {
                // can't delegate since the member has it's own trait(s), have to generate one inline
                renderSerializeExplicitBoundStructure(ctx, member, writer)
            } else {
                // re-use the document serializer
                val memberSymbol = ctx.symbolProvider.toSymbol(member)
                writer.write("input.${httpPayload.member.defaultName()}?.let { #L(serializer, it) }", memberSymbol.documentSerializerName())
            }
        } else {
            renderSerializerBody(ctx, shape, documentMembers, writer)
        }

        writer.write("return serializer.toByteArray()")
    }