in smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/rendering/protocol/HttpBindingProtocolGenerator.kt [344:393]
protected open fun renderHttpSerialize(
ctx: ProtocolGenerator.GenerationContext,
op: OperationShape,
writer: KotlinWriter
) {
val resolver = getProtocolHttpBindingResolver(ctx.model, ctx.service)
val httpTrait = resolver.httpTrait(op)
val requestBindings = resolver.requestBindings(op)
writer
.addImport(RuntimeTypes.Core.ExecutionContext)
.write("builder.method = #T.#L", RuntimeTypes.Http.HttpMethod, httpTrait.method.uppercase())
.write("")
.call {
// URI components
writer.withBlock("builder.url {", "}") {
renderUri(ctx, op, writer)
// Query Parameters
renderQueryParameters(ctx, httpTrait, requestBindings, writer)
}
}
.write("")
.call {
// headers
val headerBindings = requestBindings
.filter { it.location == HttpBinding.Location.HEADER }
.sortedBy { it.memberName }
val prefixHeaderBindings = requestBindings
.filter { it.location == HttpBinding.Location.PREFIX_HEADERS }
if (headerBindings.isNotEmpty() || prefixHeaderBindings.isNotEmpty()) {
writer
.addImport(RuntimeTypes.Http.Request.headers)
.withBlock("builder.#T {", "}", RuntimeTypes.Http.Request.headers) {
renderStringValuesMapParameters(ctx, headerBindings, writer)
prefixHeaderBindings.forEach {
writer.withBlock("input.${it.member.defaultName()}?.filter { it.value != null }?.forEach { (key, value) ->", "}") {
write("append(\"#L\$key\", value!!)", it.locationName)
}
}
}
}
}
.write("")
.call {
renderSerializeHttpBody(ctx, op, writer)
}
}