fun renderEncodeListMember()

in smithy-swift-codegen/src/main/kotlin/software/amazon/smithy/swift/codegen/integration/serde/json/MemberShapeEncodeGenerator.kt [75:122]


    fun renderEncodeListMember(
        targetShape: Shape,
        memberName: String,
        containerName: String,
        level: Int = 0
    ) {
        when (targetShape) {
            is CollectionShape -> {
                val topLevelContainerName = "${memberName.removeSurroundingBackticks()}Container"

                if (level == 0) {
                    writer.write(
                        "var \$L = $containerName.nestedUnkeyedContainer(forKey: .\$L)",
                        topLevelContainerName,
                        memberName
                    )
                    renderEncodeList(ctx, memberName, topLevelContainerName, targetShape, level)
                } else {
                    writer.write("var \$L = $containerName.nestedUnkeyedContainer()", topLevelContainerName)
                    val isSparse = targetShape.hasTrait<SparseTrait>()
                    if (isSparse) {
                        writer.openBlock("if let \$L = \$L {", "}", memberName, memberName) {
                            renderEncodeList(ctx, memberName, topLevelContainerName, targetShape, level)
                        }
                    } else {
                        renderEncodeList(ctx, memberName, topLevelContainerName, targetShape, level)
                    }
                }
            }
            // this only gets called in a recursive loop where there is a map nested deeply inside a list
            is MapShape -> {
                val topLevelContainerName = "${memberName}Container"
                writer.write("var \$L = $containerName.nestedContainer(keyedBy: \$N.self)", topLevelContainerName, ClientRuntimeTypes.Serde.Key)
                val isSparse = targetShape.hasTrait<SparseTrait>()
                if (isSparse) {
                    writer.openBlock("if let \$L = \$L {", "}", memberName, memberName) {
                        renderEncodeMap(ctx, memberName, topLevelContainerName, targetShape, level)
                    }
                } else {
                    renderEncodeMap(ctx, memberName, topLevelContainerName, targetShape, level)
                }
            }
            else -> {
                val extension = getShapeExtension(targetShape, memberName, false)
                writer.write("try $containerName.encode($extension)")
            }
        }
    }