-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ProtocolTests] Union type dereference and XML nested maps/lists seri…
…alization
- Loading branch information
1 parent
f8d10ef
commit 1036061
Showing
9 changed files
with
135 additions
and
101 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
102 changes: 2 additions & 100 deletions
102
.../amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMemberSingleXmlizeSource.vm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 4 additions & 0 deletions
4
...entgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/AllXmlSerializeTemplateMacros.vm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlListPayloadElement.vm") | ||
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlMapPayloadElement.vm") | ||
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlSingleElementToText.vm") | ||
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlSinglePayloadElement.vm") |
28 changes: 28 additions & 0 deletions
28
...ntgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlListPayloadElement.vm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
##-------------------- serializeXmlListPayloadElement macro | ||
#macro( serializeXmlListPayloadElement $spaces $serializationName $lowerCaseVarName $member $memberVarName $isNested=false $parentNode="parentNode" ) | ||
## // /* --- the actual shape member is $member; */ | ||
## // /* --- the actual shape is $member.shape; --- */ | ||
## // /* --- list member: ${member.shape.listMember} */ | ||
#set($macro.listMemberParentNode = $parentNode) | ||
#if(!$isNested && !($member.locationName && $member.shape.flattened) && !(${member.shape.listMember.locationName} && ${member.isFlattened()})) | ||
${spaces}XmlNode ${lowerCaseVarName}ParentNode = ${parentNode}.CreateChildElement("${serializationName}"); | ||
#set($macro.listMemberParentNode = "${lowerCaseVarName}ParentNode") | ||
#end | ||
#if($macro.listMemberParentNode == "${lowerCaseVarName}Node") | ||
#set($lowerCaseVarName = "${lowerCaseVarName}Nested") | ||
#end | ||
#set($macro.listItemVarName = "item") | ||
#if($memberVarName == "item") | ||
#set($macro.listItemVarName = "${lowerCaseVarName}Item") | ||
#end | ||
${spaces}for(const auto& $macro.listItemVarName : $memberVarName) | ||
${spaces}{ | ||
#set($macro.listSpaces = $spaces + " ") | ||
#set($macro.listMemberSerializationName = ${CppViewHelper.ifNotNullOrEmpty($member.shape.listMember.locationName, "member")}) | ||
#if($member.isFlattened() || $member.shape.flattened || $isNested) | ||
## if list is flattened than the name of repeated XML element is ShapeMember name in parent name OR explicitly set by parent's locationName | ||
#set($macro.listMemberSerializationName = ${CppViewHelper.ifNotNullOrEmpty($member.locationName, $serializationName)}) | ||
#end | ||
#serializeXmlSinglePayloadElement($macro.listSpaces, $macro.listMemberSerializationName, $lowerCaseVarName, $member.shape.listMember, $macro.listItemVarName, $macro.listMemberParentNode) | ||
${spaces}} | ||
#end##macro serializeXmlListPayloadElement |
30 changes: 30 additions & 0 deletions
30
...entgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlMapPayloadElement.vm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
##-------------------- serializeXmlMapPayloadElement macro | ||
#macro( serializeXmlMapPayloadElement $spaces $serializationName $lowerCaseVarName $member $memberVarName $isNested=false $parentNode="parentNode" ) | ||
##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($macro.mapEntryParentNode = $parentNode) | ||
#if(!$isNested && !($member.locationName && $member.shape.flattened)) | ||
##Nested maps appear to be always flattened | ||
${spaces}XmlNode ${lowerCaseVarName}ParentNode = ${parentNode}.CreateChildElement("${serializationName}"); | ||
#set($macro.mapEntryParentNode = "${lowerCaseVarName}ParentNode") | ||
#end | ||
#set($macro.mapItemVarName = "mapItem") | ||
#if($memberVarName == "mapItem.second") | ||
#set($macro.mapItemVarName = "${lowerCaseVarName}NestedItem") | ||
#end | ||
${spaces}for(const auto& $macro.mapItemVarName : $memberVarName) | ||
${spaces}{ | ||
#set($macro.mapSpaces = $spaces + " ") | ||
#set($macro.mapEntrySerializationName = "#if($member.locationName)$member.locationName#{else}entry#end") | ||
${spaces} XmlNode ${lowerCaseVarName}MapEntryNode = ${macro.mapEntryParentNode}.CreateChildElement("${macro.mapEntrySerializationName}"); | ||
#set($macro.mapKeySerializationName = "#if($member.shape.mapKey.locationName)$member.shape.mapKey.locationName#{else}key#end") | ||
#serializeXmlSinglePayloadElement($macro.mapSpaces, $macro.mapKeySerializationName, "${lowerCaseVarName}Key", $member.shape.mapKey, "${macro.mapItemVarName}.first", "${lowerCaseVarName}MapEntryNode") | ||
#set($macro.mapValueSerializationName = "#if($member.shape.mapValue.locationName)$member.shape.mapValue.locationName#{else}value#end") | ||
#serializeXmlSinglePayloadElement($macro.mapSpaces, $macro.mapValueSerializationName, "${lowerCaseVarName}Value", $member.shape.mapValue, "${macro.mapItemVarName}.second", "${lowerCaseVarName}MapEntryNode") | ||
${spaces}} | ||
#end##macro serializeXmlMapPayloadElement |
22 changes: 22 additions & 0 deletions
22
...tgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlSingleElementToText.vm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
##-------------------- serializeXmlSingleElementToText macro | ||
#macro( serializeXmlSingleElementToText $shapeMember $memberVarName $parentNode="parentNode" ) | ||
##/* --- the actual shape member is $shapeMember; the actual shape is $shapeMember.shape; --- */ | ||
#if($shapeMember.shape.enum) | ||
${shapeMember.shape.name}Mapper::GetNameFor${shapeMember.shape.name}(${memberVarName})## | ||
#elseif($shapeMember.shape.timeStamp) | ||
#if($member.shape.timestampFormat != "unixTimestamp") | ||
#set($macro.timestamptFormatStr = $CppViewHelper.computeTimestampFormatInXml($shapeMember.shape)) | ||
${memberVarName}.ToGmtString(Aws::Utils::DateFormat::${macro.timestamptFormatStr})## | ||
#else | ||
StringUtils::to_string(${memberVarName}.Seconds())## | ||
#end | ||
#elseif($shapeMember.shape.boolean) | ||
std::boolalpha << ${memberVarName}## | ||
#elseif($shapeMember.shape.blob) | ||
HashingUtils::Base64Encode(${memberVarName})## | ||
#elseif($shapeMember.shape.primitive || $shapeMember.shape.string) | ||
${memberVarName}## | ||
#else | ||
${memberVarName} /* serialization to text guessed for unknown shape type ${shapeMember.shape.type} */## | ||
#end | ||
#end##macro serializeXmlSingleElementToText |
36 changes: 36 additions & 0 deletions
36
...generator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlSinglePayloadElement.vm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
##-------------------- serializeXmlSinglePayloadElement macro | ||
#macro( serializeXmlSinglePayloadElement $spaces $serializationName $lowerCaseVarName $shapeMember $memberVarName $parentNode="parentNode") | ||
#if($shapeMember.xmlAttribute) | ||
## member should be serialized an XML Attribute | ||
#if($shapeMember.shape.boolean || $shapeMember.shape.primitive) | ||
${spaces}ss << #serializeXmlSingleElementToText($shapeMember, $memberVarName); | ||
${spaces}${parentNode}.SetAttributeValue("${serializationName}", ss.str()); | ||
${spaces}ss.str(""); | ||
#else | ||
${spaces}${parentNode}.SetAttributeValue("${serializationName}", #serializeXmlSingleElementToText($shapeMember, $memberVarName)); | ||
#end | ||
#break##return | ||
#end##($shapeMember.xmlAttribute) | ||
## member should be serialized to an XML Element not Attribute | ||
${spaces}XmlNode ${lowerCaseVarName}Node = ${parentNode}.CreateChildElement("${serializationName}"); | ||
#if($shapeMember.shape.boolean || $shapeMember.shape.primitive) | ||
${spaces}ss << #serializeXmlSingleElementToText($shapeMember, $memberVarName); | ||
${spaces}${lowerCaseVarName}Node.SetText(ss.str()); | ||
${spaces}ss.str(""); | ||
#else | ||
#if($shapeMember.shape.structure) | ||
#if($shapeMember.shape.isMutuallyReferencedWith($shape) || $member.shape.getName() == $shape.getName()) | ||
##Also covers the union case | ||
${spaces}${memberVarName}->AddToNode(${lowerCaseVarName}Node); | ||
#else | ||
${spaces}${memberVarName}.AddToNode(${lowerCaseVarName}Node); | ||
#end | ||
#elseif($shapeMember.shape.list) | ||
#serializeXmlListPayloadElement($spaces, $serializationName, $lowerCaseVarName, $shapeMember, $memberVarName, true, "${lowerCaseVarName}Node") | ||
#elseif($shapeMember.shape.map) | ||
#serializeXmlMapPayloadElement($spaces, $serializationName, $lowerCaseVarName, $shapeMember, $memberVarName, true, "${lowerCaseVarName}Node") | ||
#else | ||
${spaces}${lowerCaseVarName}Node.SetText(#serializeXmlSingleElementToText($shapeMember, $memberVarName)); | ||
#end | ||
#end | ||
#end##macro serializeXmlSinglePayloadElement |