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