fun renderDecodeMapMember()

in smithy-swift-codegen/src/main/kotlin/software/amazon/smithy/swift/codegen/integration/serde/json/MemberShapeDecodeGenerator.kt [239:273]


    fun renderDecodeMapMember(
        shape: MapShape,
        memberName: String,
        containerName: String,
        topLevelMember: MemberShape,
        level: Int = 0
    ) {
        val symbolName = determineSymbolForShape(shape, true)
        val originalSymbol = ctx.symbolProvider.toSymbol(shape)
        val decodedMemberName = "${memberName.removeSurroundingBackticks()}Decoded$level"
        val nestedTarget = ctx.model.expectShape(shape.value.target)
        if (level == 0) {
            val topLevelContainerName = "${memberName}Container"
            val decodeVerb = if (originalSymbol.isBoxed()) "decodeIfPresent" else "decode"
            writer.write(
                "let \$L = try $containerName.$decodeVerb(\$L.self, forKey: .\$L)",
                topLevelContainerName,
                symbolName,
                memberName
            )
            writer.write("var \$L: \$T = nil", decodedMemberName, originalSymbol)
            writer.openBlock("if let \$L = \$L {", "}", topLevelContainerName, topLevelContainerName) {
                writer.write("\$L = \$N()", decodedMemberName, originalSymbol)
                renderDecodeMapTarget(topLevelContainerName, decodedMemberName, nestedTarget, topLevelMember, level)
            }
            renderAssigningDecodedMember(topLevelMember, decodedMemberName)
        } else {
            writer.openBlock("if let \$L = \$L {", "}", memberName, memberName) {
                val previousDecodedMemberName = "${memberName.removeSurroundingBackticks()}Decoded${level - 1}"
                val symbolName = determineSymbolForShape(shape, false)
                writer.write("\$L = \$L()", containerName, symbolName)
                renderDecodeMapTarget(memberName, containerName, nestedTarget, topLevelMember, level)
            }
        }
    }