Skip to content

Commit

Permalink
fix: sparse struct serializer
Browse files Browse the repository at this point in the history
  • Loading branch information
0marperez committed May 1, 2024
1 parent bcd357c commit 7b58dd7
Showing 1 changed file with 6 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ open class SerializeStructGenerator(
ShapeType.MAP -> renderMapElement(rootMemberShape, elementShape as MapShape, nestingLevel, parentMemberName)
ShapeType.UNION,
ShapeType.STRUCTURE,
-> renderNestedStructureElement(elementShape, nestingLevel, parentMemberName)
-> renderNestedStructureElement(elementShape, nestingLevel, parentMemberName, isSparse)

else -> error("Unhandled type ${elementShape.type}")
}
Expand All @@ -280,15 +280,18 @@ open class SerializeStructGenerator(
* }
* ```
*/
private fun renderNestedStructureElement(structureShape: Shape, nestingLevel: Int, parentMemberName: String) {
private fun renderNestedStructureElement(structureShape: Shape, nestingLevel: Int, parentMemberName: String, isSparse: Boolean,) {
val serializerFnName = structureShape.type.primitiveSerializerFunctionName()
val serializerTypeName = ctx.symbolProvider.toSymbol(structureShape).documentSerializerName()
val elementName = nestingLevel.variableNameFor(NestedIdentifierType.ELEMENT)
val containerName = if (nestingLevel == 0) "input." else ""
val valueToSerializeName = valueToSerializeName(elementName)

writer.withBlock("for ($elementName in $containerName$parentMemberName) {", "}") {
writer.write("$serializerFnName(#T($valueToSerializeName, ::$serializerTypeName))", RuntimeTypes.Serde.asSdkSerializable)
when(isSparse) {
true -> writer.write("if ($elementName != null) $serializerFnName(#T($valueToSerializeName, ::$serializerTypeName)) else serializeNull()", RuntimeTypes.Serde.asSdkSerializable)
false -> writer.write("$serializerFnName(#T($valueToSerializeName, ::$serializerTypeName))", RuntimeTypes.Serde.asSdkSerializable)
}
}
}

Expand Down

0 comments on commit 7b58dd7

Please sign in to comment.