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