in smithy-kotlin-codegen/src/main/kotlin/software/amazon/smithy/kotlin/codegen/rendering/serde/SerializeStructGenerator.kt [529:549]
open fun renderPrimitiveShapeSerializer(memberShape: MemberShape, serializerNameFn: (MemberShape) -> SerializeInfo) {
val (serializeFn, encoded) = serializerNameFn(memberShape)
val postfix = idempotencyTokenPostfix(memberShape)
val targetShape = ctx.model.expectShape(memberShape.target)
val targetSymbol = ctx.symbolProvider.toSymbol(memberShape)
val defaultValue = targetSymbol.defaultValue()
val memberName = ctx.symbolProvider.toMemberName(memberShape)
if ((targetShape.isNumberShape || targetShape.isBooleanShape) && targetSymbol.isNotBoxed && defaultValue != null) {
// unboxed primitive with a default value
val ident = "input.$memberName"
val check = when (memberShape.hasTrait<RequiredTrait>()) {
true -> "" // always serialize a required member even if it's the default
else -> "if ($ident != $defaultValue) "
}
writer.write("${check}$serializeFn(#L, $ident)", memberShape.descriptorName())
} else {
writer.write("input.#L?.let { $serializeFn(#L, $encoded) }$postfix", memberName, memberShape.descriptorName())
}
}