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