override fun render()

in smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/rendering/serde/AbstractSerdeDescriptorGenerator.kt [54:94]


    override fun render() {
        if (memberShapes.isEmpty()) return

        // FIXME - decompose these symbols directly when they are emitted
        val serdeDescriptorSymbols = setOf(
            RuntimeTypes.Serde.SdkFieldDescriptor,
            RuntimeTypes.Serde.SdkObjectDescriptor,
            RuntimeTypes.Serde.SerialKind,
            RuntimeTypes.Serde.deserializeStruct,
            RuntimeTypes.Serde.deserializeList,
            RuntimeTypes.Serde.deserializeMap,
            RuntimeTypes.Serde.field,
            RuntimeTypes.Serde.asSdkSerializable,
            RuntimeTypes.Serde.serializeStruct,
            RuntimeTypes.Serde.serializeList,
            RuntimeTypes.Serde.serializeMap
        )
        writer.addImport(serdeDescriptorSymbols)
        val sortedMembers = memberShapes.sortedBy { it.memberName }
        for (member in sortedMembers) {
            val memberTarget = ctx.model.expectShape(member.target)
            renderFieldDescriptor(member, memberTarget)

            val nestedMember = memberTarget.childShape(ctx.model)
            if (nestedMember?.isContainerShape() == true) {
                renderContainerFieldDescriptors(member, nestedMember)
            }
        }
        writer.withBlock("val OBJ_DESCRIPTOR = SdkObjectDescriptor.build {", "}") {
            val objTraits = getObjectDescriptorTraits()
            objTraits.forEach { trait ->
                writer.addImport(trait.symbol)
                writer.write("trait($trait)")
            }

            for (member in sortedMembers) {
                write("field(#L)", member.descriptorName())
            }
        }
        writer.write("")
    }