Skip to content

Commit

Permalink
Generate xml map serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
SergeyRyabinin committed Jan 29, 2025
1 parent c8ac09e commit 0f07498
Showing 1 changed file with 27 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,33 @@ ${memberVarName}##
#serializeXmlPayloadElement($listSpaces, $listElSerializationName, $lowerCaseVarName, $member.shape.listMember, "item", $listElParentNode)
${spaces}}
#end##macro serializeXmlListPayloadElement
##-------------------- serializeXmlMapPayloadElement macro
#macro( serializeXmlMapPayloadElement $spaces $serializationName $lowerCaseVarName $member $memberVarName )
##https://smithy.io/2.0/spec/protocol-traits.html#xml-map-serialization
##TODO: might not be 100% correct, pending validation by protocol tests
##// /* --- the actual shape member is $member; the actual shape is $member.shape; --- */
##// /* --- key member: ${member.shape.mapKey} */
##// /* --- key shape: ${member.shape.mapKey.shape} */
##// /* --- key member: ${member.shape.mapValue} */
##// /* --- key shape: ${member.shape.mapValue.shape} */
#set($mapEntryParentNode = "parentNode")
#if(!($member.locationName && $member.shape.flattened))
${spaces}XmlNode ${lowerCaseVarName}ParentNode = parentNode.CreateChildElement("${serializationName}");
#set($mapEntryParentNode = "${lowerCaseVarName}ParentNode")
#end
${spaces}for(const auto& mapItem : $memberVarName)
${spaces}{
#set($mapSpaces = $spaces + " ")
#set($mapEntrySerializationName = "#if($member.locationName)$member.locationName#{else}entry#end")
${spaces} XmlNode ${lowerCaseVarName}MapEntryNode = ${mapEntryParentNode}.CreateChildElement("${mapEntrySerializationName}");
#set($mapKeySerializationName = "#if($member.shape.mapKey.locationName)$member.shape.mapKey.locationName#{else}key#end")
#serializeXmlPayloadElement($mapSpaces, $mapKeySerializationName, "${lowerCaseVarName}Key", $member.shape.mapKey, "mapItem.first", "${lowerCaseVarName}MapEntryNode")
#set($mapValueSerializationName = "#if($member.shape.mapValue.locationName)$member.shape.mapValue.locationName#{else}value#end")
#serializeXmlPayloadElement($mapSpaces, $mapValueSerializationName, "${lowerCaseVarName}Value", $member.shape.mapValue, "mapItem.second", "${lowerCaseVarName}MapEntryNode")
${spaces}}
#end##macro serializeXmlMapPayloadElement
##-------------------- END OF MACROS, ACTUAL TEMPLATE BEGINS --------------------
#if($member.shape.enum || $member.shape.boolean || $member.shape.primitive || $member.shape.timeStamp || $member.shape.structure)
#if($member.shape.enum || $member.shape.boolean || $member.shape.primitive || $member.shape.timeStamp || $member.shape.structure || $member.shape.blob)
#serializeXmlPayloadElement($spaces, $serializationName, $lowerCaseVarName, $member, $memberVarName)
#elseif($member.shape.string)
#if($member.xmlAttribute)
Expand Down Expand Up @@ -101,7 +126,7 @@ ${memberVarName}##
#elseif($member.shape.list)
#serializeXmlListPayloadElement($spaces, $serializationName, $lowerCaseVarName, $member, $memberVarName)
#elseif($member.shape.map)
!!!! Work in progress for map serialization
#serializeXmlMapPayloadElement($spaces, $serializationName, $lowerCaseVarName, $member, $memberVarName)
#else
!!!! Code generation error: the template does not support this shape under $serializationName serialization to xml: ${member}
#end##End of member.shape is structure or list

0 comments on commit 0f07498

Please sign in to comment.