fun render()

in smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/rendering/protocol/HttpStringValuesMapSerializer.kt [44:91]


    fun render(
        writer: KotlinWriter
    ) {
        bindings.sortedBy(HttpBindingDescriptor::memberName).forEach {
            val memberName = symbolProvider.toMemberName(it.member)
            val memberTarget = model.expectShape(it.member.target)
            val paramName = it.locationName
            val location = it.location
            val member = it.member
            when (memberTarget) {
                is CollectionShape -> renderCollectionShape(it, memberTarget, writer)
                is TimestampShape -> {
                    val tsFormat = resolver.determineTimestampFormat(member, location, defaultTimestampFormat)
                    // headers/query params need to be a string
                    val formatted = formatInstant("input.$memberName", tsFormat, forceString = true)
                    writer.write("if (input.#1L != null) append(\"#2L\", #3L)", memberName, paramName, formatted)
                    writer.addImport(RuntimeTypes.Core.TimestampFormat)
                }
                is BlobShape -> {
                    writer.addImport("encodeBase64String", KotlinDependency.UTILS)
                    writer.write(
                        "if (input.#1L?.isNotEmpty() == true) append(\"#2L\", input.#1L.encodeBase64String())",
                        memberName,
                        paramName
                    )
                }
                is StringShape -> renderStringShape(it, memberTarget, writer)
                else -> {
                    // encode to string
                    val encodedValue = "\"\${input.$memberName}\""

                    val targetSymbol = symbolProvider.toSymbol(member)
                    val defaultValue = targetSymbol.defaultValue()
                    if ((memberTarget.isNumberShape || memberTarget.isBooleanShape) && targetSymbol.isNotBoxed && defaultValue != null) {
                        // unboxed primitive with a default value
                        if (member.hasTrait<RequiredTrait>()) {
                            // always serialize a required member even if it's the default
                            writer.write("append(#S, #L)", paramName, encodedValue)
                        } else {
                            writer.write("if (input.#1L != $defaultValue) append(#2S, #3L)", memberName, paramName, encodedValue)
                        }
                    } else {
                        writer.write("if (input.#1L != null) append(#2S, #3L)", memberName, paramName, encodedValue)
                    }
                }
            }
        }
    }