From f8ac38d2af5a137a76505014c504f1012795338b Mon Sep 17 00:00:00 2001
From: kai lin
Date: Tue, 24 Mar 2026 13:59:01 -0400
Subject: [PATCH 1/2] init
---
.../aws/connectcases/model/AuditEvent.h | 14 ++-
.../model/GetCaseAuditEventsResult.h | 14 ++-
.../aws/connectcases/model/GetCaseResult.h | 16 ++-
.../connectcases/model/GetCaseRuleResponse.h | 16 ++-
.../aws/connectcases/model/GetDomainResult.h | 16 ++-
.../aws/connectcases/model/GetFieldResponse.h | 16 ++-
.../aws/connectcases/model/GetLayoutResult.h | 16 ++-
.../connectcases/model/GetTemplateResult.h | 16 ++-
.../model/ListTagsForResourceResult.h | 16 ++-
.../model/SearchAllRelatedItemsResponseItem.h | 16 ++-
.../model/SearchAllRelatedItemsResult.h | 14 ++-
.../model/SearchCasesResponseItem.h | 16 ++-
.../connectcases/model/SearchCasesResult.h | 14 ++-
.../model/SearchRelatedItemsResponseItem.h | 16 ++-
.../model/SearchRelatedItemsResult.h | 14 ++-
.../connectcases/model/TagResourceRequest.h | 16 ++-
.../model/UpdateRelatedItemResult.h | 16 ++-
.../source/model/AuditEvent.cpp | 12 +-
.../source/model/GetCaseAuditEventsResult.cpp | 6 +-
.../source/model/GetCaseResult.cpp | 4 +
.../source/model/GetCaseRuleResponse.cpp | 10 +-
.../source/model/GetDomainResult.cpp | 4 +
.../source/model/GetFieldResponse.cpp | 10 +-
.../source/model/GetLayoutResult.cpp | 4 +
.../source/model/GetTemplateResult.cpp | 4 +
.../model/ListTagsForResourceResult.cpp | 4 +
.../SearchAllRelatedItemsResponseItem.cpp | 10 +-
.../model/SearchAllRelatedItemsResult.cpp | 6 +-
.../source/model/SearchCasesResponseItem.cpp | 10 +-
.../source/model/SearchCasesResult.cpp | 6 +-
.../model/SearchRelatedItemsResponseItem.cpp | 10 +-
.../source/model/SearchRelatedItemsResult.cpp | 6 +-
.../source/model/TagResourceRequest.cpp | 6 +-
.../source/model/UpdateRelatedItemResult.cpp | 4 +
.../aws/core/utils/json/JsonSerializer.h | 11 ++
.../source/utils/json/JsonSerializer.cpp | 24 ++++
.../utils/json/JsonSerializerTest.cpp | 33 +++++
.../domainmodels/c2j/C2jShape.java | 1 +
.../domainmodels/codegeneration/Shape.java | 1 +
.../codegeneration/cpp/CppCborViewHelper.java | 49 --------
.../codegeneration/cpp/CppViewHelper.java | 48 ++++++-
.../cpp/CborCppClientGenerator.java | 9 +-
.../cpp/CppProtocolTestGenerator.java | 7 +-
.../C2jModelToGeneratorModelTransformer.java | 5 +
.../cpp/ModelClassHeaderMembersSource.vm | 4 +
.../cpp/ModelClassMembersAndInlines.vm | 41 +++++-
.../velocity/cpp/cbor/CborDecodeListValue.vm | 115 ++++++++++++++---
.../velocity/cpp/cbor/CborDecodeMapValue.vm | 117 +++++++++++++++---
.../velocity/cpp/cbor/CborEncodeValue.vm | 24 +++-
.../velocity/cpp/cbor/CborResultHeader.vm | 1 +
.../velocity/cpp/cbor/CborSubObjectHeader.vm | 1 +
...rviceClientModelHeaderMemberDeclaration.vm | 4 +
.../ModelInternalMapOrListJsonDeserializer.vm | 38 ++++++
.../cpp/json/ModelInternalMapOrListJsonize.vm | 59 +++++++++
.../cpp/protocoltests/request/SetListMacro.vm | 13 ++
.../cpp/protocoltests/request/SetMapMacro.vm | 21 ++++
.../protocoltests/result/ValidateListMacro.vm | 37 +++++-
.../protocoltests/result/ValidateMapMacro.vm | 41 +++++-
.../result/ValidateParamsMacro.vm | 4 +
.../result/ValidateSingleParameterMacro.vm | 5 +-
.../serializeRequestQueryListElement.vm | 13 ++
.../serializeRequestQueryMapElement.vm | 13 ++
.../serializeSubObjQueryMapElement.vm | 12 ++
.../deserializeXmlListPayloadElement.vm | 12 ++
.../deserializeXmlMapPayloadElement.vm | 6 +
.../deserializeXmlNestedListElement.vm | 8 ++
.../deserializeXmlNestedMapElement.vm | 9 ++
.../serializeXmlListPayloadElement.vm | 9 ++
.../serializeXmlMapPayloadElement.vm | 9 ++
tools/scripts/run_code_generation.py | 5 +-
70 files changed, 979 insertions(+), 208 deletions(-)
delete mode 100644 tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/codegeneration/cpp/CppCborViewHelper.java
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/AuditEvent.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/AuditEvent.h
index c587fc9f713f..2b37bda92232 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/AuditEvent.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/AuditEvent.h
@@ -12,6 +12,7 @@
#include
#include
#include
+#include
#include
@@ -113,14 +114,14 @@ class AuditEvent {
/**
* A list of Case Audit History event fields.
*/
- inline const Aws::Vector& GetFields() const { return m_fields; }
+ inline const Aws::Vector>& GetFields() const { return m_fields; }
inline bool FieldsHasBeenSet() const { return m_fieldsHasBeenSet; }
- template >
+ template >>
void SetFields(FieldsT&& value) {
m_fieldsHasBeenSet = true;
m_fields = std::forward(value);
}
- template >
+ template >>
AuditEvent& WithFields(FieldsT&& value) {
SetFields(std::forward(value));
return *this;
@@ -131,6 +132,11 @@ class AuditEvent {
m_fields.emplace_back(std::forward(value));
return *this;
}
+ inline AuditEvent& AddFields(Aws::Crt::Optional value) {
+ m_fieldsHasBeenSet = true;
+ m_fields.push_back(value);
+ return *this;
+ }
///@}
///@{
@@ -159,7 +165,7 @@ class AuditEvent {
Aws::Utils::DateTime m_performedTime{};
- Aws::Vector m_fields;
+ Aws::Vector> m_fields;
AuditEventPerformedBy m_performedBy;
bool m_eventIdHasBeenSet = false;
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetCaseAuditEventsResult.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetCaseAuditEventsResult.h
index 2d78754a729d..44b78f22e3c0 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetCaseAuditEventsResult.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetCaseAuditEventsResult.h
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
#include
@@ -52,13 +53,13 @@ class GetCaseAuditEventsResult {
* A list of case audits where each represents a particular edit of the
* case.
*/
- inline const Aws::Vector& GetAuditEvents() const { return m_auditEvents; }
- template >
+ inline const Aws::Vector>& GetAuditEvents() const { return m_auditEvents; }
+ template >>
void SetAuditEvents(AuditEventsT&& value) {
m_auditEventsHasBeenSet = true;
m_auditEvents = std::forward(value);
}
- template >
+ template >>
GetCaseAuditEventsResult& WithAuditEvents(AuditEventsT&& value) {
SetAuditEvents(std::forward(value));
return *this;
@@ -69,6 +70,11 @@ class GetCaseAuditEventsResult {
m_auditEvents.emplace_back(std::forward(value));
return *this;
}
+ inline GetCaseAuditEventsResult& AddAuditEvents(Aws::Crt::Optional value) {
+ m_auditEventsHasBeenSet = true;
+ m_auditEvents.push_back(value);
+ return *this;
+ }
///@}
///@{
@@ -90,7 +96,7 @@ class GetCaseAuditEventsResult {
private:
Aws::String m_nextToken;
- Aws::Vector m_auditEvents;
+ Aws::Vector> m_auditEvents;
Aws::String m_requestId;
Aws::Http::HttpResponseCode m_HttpResponseCode;
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetCaseResult.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetCaseResult.h
index 88134f3871c4..18497a2afe1d 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetCaseResult.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetCaseResult.h
@@ -10,6 +10,7 @@
#include
#include
#include
+#include
#include
@@ -93,23 +94,28 @@ class GetCaseResult {
* A map of of key-value pairs that represent tags on a resource. Tags are used
* to organize, track, or control access for this resource.
*/
- inline const Aws::Map& GetTags() const { return m_tags; }
- template >
+ inline const Aws::Map>& GetTags() const { return m_tags; }
+ template >>
void SetTags(TagsT&& value) {
m_tagsHasBeenSet = true;
m_tags = std::forward(value);
}
- template >
+ template >>
GetCaseResult& WithTags(TagsT&& value) {
SetTags(std::forward(value));
return *this;
}
- template
+ template >
GetCaseResult& AddTags(TagsKeyT&& key, TagsValueT&& value) {
m_tagsHasBeenSet = true;
m_tags.emplace(std::forward(key), std::forward(value));
return *this;
}
+ inline GetCaseResult& AddTags(Aws::String key, Aws::Crt::Optional value) {
+ m_tagsHasBeenSet = true;
+ m_tags.emplace(key, value);
+ return *this;
+ }
///@}
///@{
@@ -135,7 +141,7 @@ class GetCaseResult {
Aws::String m_nextToken;
- Aws::Map m_tags;
+ Aws::Map> m_tags;
Aws::String m_requestId;
Aws::Http::HttpResponseCode m_HttpResponseCode;
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetCaseRuleResponse.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetCaseRuleResponse.h
index 2b1f890f4fce..8b6c1b5e1aca 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetCaseRuleResponse.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetCaseRuleResponse.h
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
#include
@@ -185,24 +186,29 @@ class GetCaseRuleResponse {
* A map of of key-value pairs that represent tags on a resource. Tags are used
* to organize, track, or control access for this resource.
*/
- inline const Aws::Map& GetTags() const { return m_tags; }
+ inline const Aws::Map>& GetTags() const { return m_tags; }
inline bool TagsHasBeenSet() const { return m_tagsHasBeenSet; }
- template >
+ template >>
void SetTags(TagsT&& value) {
m_tagsHasBeenSet = true;
m_tags = std::forward(value);
}
- template >
+ template >>
GetCaseRuleResponse& WithTags(TagsT&& value) {
SetTags(std::forward(value));
return *this;
}
- template
+ template >
GetCaseRuleResponse& AddTags(TagsKeyT&& key, TagsValueT&& value) {
m_tagsHasBeenSet = true;
m_tags.emplace(std::forward(key), std::forward(value));
return *this;
}
+ inline GetCaseRuleResponse& AddTags(Aws::String key, Aws::Crt::Optional value) {
+ m_tagsHasBeenSet = true;
+ m_tags.emplace(key, value);
+ return *this;
+ }
///@}
private:
Aws::String m_caseRuleId;
@@ -221,7 +227,7 @@ class GetCaseRuleResponse {
Aws::Utils::DateTime m_lastModifiedTime{};
- Aws::Map m_tags;
+ Aws::Map> m_tags;
bool m_caseRuleIdHasBeenSet = false;
bool m_nameHasBeenSet = false;
bool m_caseRuleArnHasBeenSet = false;
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetDomainResult.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetDomainResult.h
index 2813cd8232e2..19164920e091 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetDomainResult.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetDomainResult.h
@@ -10,6 +10,7 @@
#include
#include
#include
+#include
#include
@@ -118,23 +119,28 @@ class GetDomainResult {
* A map of of key-value pairs that represent tags on a resource. Tags are used
* to organize, track, or control access for this resource.
*/
- inline const Aws::Map& GetTags() const { return m_tags; }
- template >
+ inline const Aws::Map>& GetTags() const { return m_tags; }
+ template >>
void SetTags(TagsT&& value) {
m_tagsHasBeenSet = true;
m_tags = std::forward(value);
}
- template >
+ template >>
GetDomainResult& WithTags(TagsT&& value) {
SetTags(std::forward(value));
return *this;
}
- template
+ template >
GetDomainResult& AddTags(TagsKeyT&& key, TagsValueT&& value) {
m_tagsHasBeenSet = true;
m_tags.emplace(std::forward(key), std::forward(value));
return *this;
}
+ inline GetDomainResult& AddTags(Aws::String key, Aws::Crt::Optional value) {
+ m_tagsHasBeenSet = true;
+ m_tags.emplace(key, value);
+ return *this;
+ }
///@}
///@{
@@ -164,7 +170,7 @@ class GetDomainResult {
DomainStatus m_domainStatus{DomainStatus::NOT_SET};
- Aws::Map m_tags;
+ Aws::Map> m_tags;
Aws::String m_requestId;
Aws::Http::HttpResponseCode m_HttpResponseCode;
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetFieldResponse.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetFieldResponse.h
index 9d805758474b..26a83b15ff8a 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetFieldResponse.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetFieldResponse.h
@@ -11,6 +11,7 @@
#include
#include
#include
+#include
#include
@@ -145,24 +146,29 @@ class GetFieldResponse {
* A map of of key-value pairs that represent tags on a resource. Tags are used
* to organize, track, or control access for this resource.
*/
- inline const Aws::Map& GetTags() const { return m_tags; }
+ inline const Aws::Map>& GetTags() const { return m_tags; }
inline bool TagsHasBeenSet() const { return m_tagsHasBeenSet; }
- template >
+ template >>
void SetTags(TagsT&& value) {
m_tagsHasBeenSet = true;
m_tags = std::forward(value);
}
- template >
+ template >>
GetFieldResponse& WithTags(TagsT&& value) {
SetTags(std::forward(value));
return *this;
}
- template
+ template >
GetFieldResponse& AddTags(TagsKeyT&& key, TagsValueT&& value) {
m_tagsHasBeenSet = true;
m_tags.emplace(std::forward(key), std::forward(value));
return *this;
}
+ inline GetFieldResponse& AddTags(Aws::String key, Aws::Crt::Optional value) {
+ m_tagsHasBeenSet = true;
+ m_tags.emplace(key, value);
+ return *this;
+ }
///@}
///@{
@@ -247,7 +253,7 @@ class GetFieldResponse {
FieldNamespace m_namespace{FieldNamespace::NOT_SET};
- Aws::Map m_tags;
+ Aws::Map> m_tags;
bool m_deleted{false};
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetLayoutResult.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetLayoutResult.h
index bfe8d66506cf..bb971d052543 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetLayoutResult.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetLayoutResult.h
@@ -10,6 +10,7 @@
#include
#include
#include
+#include
#include
@@ -104,23 +105,28 @@ class GetLayoutResult {
* A map of of key-value pairs that represent tags on a resource. Tags are used
* to organize, track, or control access for this resource.
*/
- inline const Aws::Map& GetTags() const { return m_tags; }
- template >
+ inline const Aws::Map>& GetTags() const { return m_tags; }
+ template >>
void SetTags(TagsT&& value) {
m_tagsHasBeenSet = true;
m_tags = std::forward(value);
}
- template >
+ template >>
GetLayoutResult& WithTags(TagsT&& value) {
SetTags(std::forward(value));
return *this;
}
- template
+ template >
GetLayoutResult& AddTags(TagsKeyT&& key, TagsValueT&& value) {
m_tagsHasBeenSet = true;
m_tags.emplace(std::forward(key), std::forward(value));
return *this;
}
+ inline GetLayoutResult& AddTags(Aws::String key, Aws::Crt::Optional value) {
+ m_tagsHasBeenSet = true;
+ m_tags.emplace(key, value);
+ return *this;
+ }
///@}
///@{
@@ -197,7 +203,7 @@ class GetLayoutResult {
LayoutContent m_content;
- Aws::Map m_tags;
+ Aws::Map> m_tags;
bool m_deleted{false};
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetTemplateResult.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetTemplateResult.h
index a70d35c9f62b..5f2fd4b08bcf 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetTemplateResult.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/GetTemplateResult.h
@@ -15,6 +15,7 @@
#include
#include
#include
+#include
#include
@@ -149,23 +150,28 @@ class GetTemplateResult {
* A map of of key-value pairs that represent tags on a resource. Tags are used
* to organize, track, or control access for this resource.
*/
- inline const Aws::Map& GetTags() const { return m_tags; }
- template >
+ inline const Aws::Map>& GetTags() const { return m_tags; }
+ template >>
void SetTags(TagsT&& value) {
m_tagsHasBeenSet = true;
m_tags = std::forward(value);
}
- template >
+ template >>
GetTemplateResult& WithTags(TagsT&& value) {
SetTags(std::forward(value));
return *this;
}
- template
+ template >
GetTemplateResult& AddTags(TagsKeyT&& key, TagsValueT&& value) {
m_tagsHasBeenSet = true;
m_tags.emplace(std::forward(key), std::forward(value));
return *this;
}
+ inline GetTemplateResult& AddTags(Aws::String key, Aws::Crt::Optional value) {
+ m_tagsHasBeenSet = true;
+ m_tags.emplace(key, value);
+ return *this;
+ }
///@}
///@{
@@ -311,7 +317,7 @@ class GetTemplateResult {
Aws::Vector m_requiredFields;
- Aws::Map m_tags;
+ Aws::Map> m_tags;
TemplateStatus m_status{TemplateStatus::NOT_SET};
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/ListTagsForResourceResult.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/ListTagsForResourceResult.h
index 8c1a7e10715e..c6f2c6652531 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/ListTagsForResourceResult.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/ListTagsForResourceResult.h
@@ -8,6 +8,7 @@
#include
#include
#include
+#include
#include
@@ -33,23 +34,28 @@ class ListTagsForResourceResult {
* A map of of key-value pairs that represent tags on a resource. Tags are used
* to organize, track, or control access for this resource.
*/
- inline const Aws::Map& GetTags() const { return m_tags; }
- template >
+ inline const Aws::Map>& GetTags() const { return m_tags; }
+ template >>
void SetTags(TagsT&& value) {
m_tagsHasBeenSet = true;
m_tags = std::forward(value);
}
- template >
+ template >>
ListTagsForResourceResult& WithTags(TagsT&& value) {
SetTags(std::forward(value));
return *this;
}
- template
+ template >
ListTagsForResourceResult& AddTags(TagsKeyT&& key, TagsValueT&& value) {
m_tagsHasBeenSet = true;
m_tags.emplace(std::forward(key), std::forward(value));
return *this;
}
+ inline ListTagsForResourceResult& AddTags(Aws::String key, Aws::Crt::Optional value) {
+ m_tagsHasBeenSet = true;
+ m_tags.emplace(key, value);
+ return *this;
+ }
///@}
///@{
@@ -69,7 +75,7 @@ class ListTagsForResourceResult {
inline Aws::Http::HttpResponseCode GetHttpResponseCode() const { return m_HttpResponseCode; }
private:
- Aws::Map m_tags;
+ Aws::Map> m_tags;
Aws::String m_requestId;
Aws::Http::HttpResponseCode m_HttpResponseCode;
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchAllRelatedItemsResponseItem.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchAllRelatedItemsResponseItem.h
index ccfdbcb753bf..3ef9ed0e87a0 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchAllRelatedItemsResponseItem.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchAllRelatedItemsResponseItem.h
@@ -11,6 +11,7 @@
#include
#include
#include
+#include
#include
@@ -146,24 +147,29 @@ class SearchAllRelatedItemsResponseItem {
* A map of of key-value pairs that represent tags on a resource. Tags are used
* to organize, track, or control access for this resource.
*/
- inline const Aws::Map& GetTags() const { return m_tags; }
+ inline const Aws::Map>& GetTags() const { return m_tags; }
inline bool TagsHasBeenSet() const { return m_tagsHasBeenSet; }
- template >
+ template >>
void SetTags(TagsT&& value) {
m_tagsHasBeenSet = true;
m_tags = std::forward(value);
}
- template >
+ template >>
SearchAllRelatedItemsResponseItem& WithTags(TagsT&& value) {
SetTags(std::forward(value));
return *this;
}
- template
+ template >
SearchAllRelatedItemsResponseItem& AddTags(TagsKeyT&& key, TagsValueT&& value) {
m_tagsHasBeenSet = true;
m_tags.emplace(std::forward(key), std::forward(value));
return *this;
}
+ inline SearchAllRelatedItemsResponseItem& AddTags(Aws::String key, Aws::Crt::Optional value) {
+ m_tagsHasBeenSet = true;
+ m_tags.emplace(key, value);
+ return *this;
+ }
///@}
private:
Aws::String m_relatedItemId;
@@ -178,7 +184,7 @@ class SearchAllRelatedItemsResponseItem {
UserUnion m_performedBy;
- Aws::Map m_tags;
+ Aws::Map> m_tags;
bool m_relatedItemIdHasBeenSet = false;
bool m_caseIdHasBeenSet = false;
bool m_typeHasBeenSet = false;
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchAllRelatedItemsResult.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchAllRelatedItemsResult.h
index fc9a363bce5d..7e0a53fb4110 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchAllRelatedItemsResult.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchAllRelatedItemsResult.h
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
#include
@@ -51,13 +52,13 @@ class SearchAllRelatedItemsResult {
/**
* A list of items related to a case.
*/
- inline const Aws::Vector& GetRelatedItems() const { return m_relatedItems; }
- template >
+ inline const Aws::Vector>& GetRelatedItems() const { return m_relatedItems; }
+ template >>
void SetRelatedItems(RelatedItemsT&& value) {
m_relatedItemsHasBeenSet = true;
m_relatedItems = std::forward(value);
}
- template >
+ template >>
SearchAllRelatedItemsResult& WithRelatedItems(RelatedItemsT&& value) {
SetRelatedItems(std::forward(value));
return *this;
@@ -68,6 +69,11 @@ class SearchAllRelatedItemsResult {
m_relatedItems.emplace_back(std::forward(value));
return *this;
}
+ inline SearchAllRelatedItemsResult& AddRelatedItems(Aws::Crt::Optional value) {
+ m_relatedItemsHasBeenSet = true;
+ m_relatedItems.push_back(value);
+ return *this;
+ }
///@}
///@{
@@ -89,7 +95,7 @@ class SearchAllRelatedItemsResult {
private:
Aws::String m_nextToken;
- Aws::Vector m_relatedItems;
+ Aws::Vector> m_relatedItems;
Aws::String m_requestId;
Aws::Http::HttpResponseCode m_HttpResponseCode;
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchCasesResponseItem.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchCasesResponseItem.h
index 119be4308f83..d08c1ab25dd2 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchCasesResponseItem.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchCasesResponseItem.h
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
#include
@@ -99,24 +100,29 @@ class SearchCasesResponseItem {
* A map of of key-value pairs that represent tags on a resource. Tags are used
* to organize, track, or control access for this resource.
*/
- inline const Aws::Map& GetTags() const { return m_tags; }
+ inline const Aws::Map>& GetTags() const { return m_tags; }
inline bool TagsHasBeenSet() const { return m_tagsHasBeenSet; }
- template >
+ template >>
void SetTags(TagsT&& value) {
m_tagsHasBeenSet = true;
m_tags = std::forward(value);
}
- template >
+ template >>
SearchCasesResponseItem& WithTags(TagsT&& value) {
SetTags(std::forward(value));
return *this;
}
- template
+ template >
SearchCasesResponseItem& AddTags(TagsKeyT&& key, TagsValueT&& value) {
m_tagsHasBeenSet = true;
m_tags.emplace(std::forward(key), std::forward(value));
return *this;
}
+ inline SearchCasesResponseItem& AddTags(Aws::String key, Aws::Crt::Optional value) {
+ m_tagsHasBeenSet = true;
+ m_tags.emplace(key, value);
+ return *this;
+ }
///@}
private:
Aws::String m_caseId;
@@ -125,7 +131,7 @@ class SearchCasesResponseItem {
Aws::Vector m_fields;
- Aws::Map m_tags;
+ Aws::Map> m_tags;
bool m_caseIdHasBeenSet = false;
bool m_templateIdHasBeenSet = false;
bool m_fieldsHasBeenSet = false;
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchCasesResult.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchCasesResult.h
index 5d8f85788c22..5d95ab89c6bc 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchCasesResult.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchCasesResult.h
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
#include
@@ -53,13 +54,13 @@ class SearchCasesResult {
* CaseId and Fields where each field is a complex union
* structure.
*/
- inline const Aws::Vector& GetCases() const { return m_cases; }
- template >
+ inline const Aws::Vector>& GetCases() const { return m_cases; }
+ template >>
void SetCases(CasesT&& value) {
m_casesHasBeenSet = true;
m_cases = std::forward(value);
}
- template >
+ template >>
SearchCasesResult& WithCases(CasesT&& value) {
SetCases(std::forward(value));
return *this;
@@ -70,6 +71,11 @@ class SearchCasesResult {
m_cases.emplace_back(std::forward(value));
return *this;
}
+ inline SearchCasesResult& AddCases(Aws::Crt::Optional value) {
+ m_casesHasBeenSet = true;
+ m_cases.push_back(value);
+ return *this;
+ }
///@}
///@{
@@ -106,7 +112,7 @@ class SearchCasesResult {
private:
Aws::String m_nextToken;
- Aws::Vector m_cases;
+ Aws::Vector> m_cases;
long long m_totalCount{0};
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchRelatedItemsResponseItem.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchRelatedItemsResponseItem.h
index e631683345da..ab554870499f 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchRelatedItemsResponseItem.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchRelatedItemsResponseItem.h
@@ -11,6 +11,7 @@
#include
#include
#include
+#include
#include
@@ -111,24 +112,29 @@ class SearchRelatedItemsResponseItem {
* A map of of key-value pairs that represent tags on a resource. Tags are used
* to organize, track, or control access for this resource.
*/
- inline const Aws::Map& GetTags() const { return m_tags; }
+ inline const Aws::Map>& GetTags() const { return m_tags; }
inline bool TagsHasBeenSet() const { return m_tagsHasBeenSet; }
- template >
+ template >>
void SetTags(TagsT&& value) {
m_tagsHasBeenSet = true;
m_tags = std::forward(value);
}
- template >
+ template >>
SearchRelatedItemsResponseItem& WithTags(TagsT&& value) {
SetTags(std::forward(value));
return *this;
}
- template
+ template >
SearchRelatedItemsResponseItem& AddTags(TagsKeyT&& key, TagsValueT&& value) {
m_tagsHasBeenSet = true;
m_tags.emplace(std::forward(key), std::forward(value));
return *this;
}
+ inline SearchRelatedItemsResponseItem& AddTags(Aws::String key, Aws::Crt::Optional value) {
+ m_tagsHasBeenSet = true;
+ m_tags.emplace(key, value);
+ return *this;
+ }
///@}
///@{
@@ -157,7 +163,7 @@ class SearchRelatedItemsResponseItem {
RelatedItemContent m_content;
- Aws::Map m_tags;
+ Aws::Map> m_tags;
UserUnion m_performedBy;
bool m_relatedItemIdHasBeenSet = false;
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchRelatedItemsResult.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchRelatedItemsResult.h
index 0c6a43fd72d9..77869aeb866e 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchRelatedItemsResult.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/SearchRelatedItemsResult.h
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
#include
@@ -51,13 +52,13 @@ class SearchRelatedItemsResult {
/**
* A list of items related to a case.
*/
- inline const Aws::Vector& GetRelatedItems() const { return m_relatedItems; }
- template >
+ inline const Aws::Vector>& GetRelatedItems() const { return m_relatedItems; }
+ template >>
void SetRelatedItems(RelatedItemsT&& value) {
m_relatedItemsHasBeenSet = true;
m_relatedItems = std::forward(value);
}
- template >
+ template >>
SearchRelatedItemsResult& WithRelatedItems(RelatedItemsT&& value) {
SetRelatedItems(std::forward(value));
return *this;
@@ -68,6 +69,11 @@ class SearchRelatedItemsResult {
m_relatedItems.emplace_back(std::forward(value));
return *this;
}
+ inline SearchRelatedItemsResult& AddRelatedItems(Aws::Crt::Optional value) {
+ m_relatedItemsHasBeenSet = true;
+ m_relatedItems.push_back(value);
+ return *this;
+ }
///@}
///@{
@@ -89,7 +95,7 @@ class SearchRelatedItemsResult {
private:
Aws::String m_nextToken;
- Aws::Vector m_relatedItems;
+ Aws::Vector> m_relatedItems;
Aws::String m_requestId;
Aws::Http::HttpResponseCode m_HttpResponseCode;
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/TagResourceRequest.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/TagResourceRequest.h
index 1f41bec9cff8..8a22369231c3 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/TagResourceRequest.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/TagResourceRequest.h
@@ -8,6 +8,7 @@
#include
#include
#include
+#include
#include
@@ -52,29 +53,34 @@ class TagResourceRequest : public ConnectCasesRequest {
* A map of of key-value pairs that represent tags on a resource. Tags are used
* to organize, track, or control access for this resource.
*/
- inline const Aws::Map& GetTags() const { return m_tags; }
+ inline const Aws::Map>& GetTags() const { return m_tags; }
inline bool TagsHasBeenSet() const { return m_tagsHasBeenSet; }
- template >
+ template >>
void SetTags(TagsT&& value) {
m_tagsHasBeenSet = true;
m_tags = std::forward(value);
}
- template >
+ template >>
TagResourceRequest& WithTags(TagsT&& value) {
SetTags(std::forward(value));
return *this;
}
- template
+ template >
TagResourceRequest& AddTags(TagsKeyT&& key, TagsValueT&& value) {
m_tagsHasBeenSet = true;
m_tags.emplace(std::forward(key), std::forward(value));
return *this;
}
+ inline TagResourceRequest& AddTags(Aws::String key, Aws::Crt::Optional value) {
+ m_tagsHasBeenSet = true;
+ m_tags.emplace(key, value);
+ return *this;
+ }
///@}
private:
Aws::String m_arn;
- Aws::Map m_tags;
+ Aws::Map> m_tags;
bool m_arnHasBeenSet = false;
bool m_tagsHasBeenSet = false;
};
diff --git a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/UpdateRelatedItemResult.h b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/UpdateRelatedItemResult.h
index bfa4c09af375..617753592d4a 100644
--- a/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/UpdateRelatedItemResult.h
+++ b/generated/src/aws-cpp-sdk-connectcases/include/aws/connectcases/model/UpdateRelatedItemResult.h
@@ -12,6 +12,7 @@
#include
#include
#include
+#include
#include
@@ -120,23 +121,28 @@ class UpdateRelatedItemResult {
* A map of of key-value pairs that represent tags on a resource. Tags are used
* to organize, track, or control access for this resource.
*/
- inline const Aws::Map& GetTags() const { return m_tags; }
- template >
+ inline const Aws::Map>& GetTags() const { return m_tags; }
+ template >>
void SetTags(TagsT&& value) {
m_tagsHasBeenSet = true;
m_tags = std::forward(value);
}
- template >
+ template >>
UpdateRelatedItemResult& WithTags(TagsT&& value) {
SetTags(std::forward(value));
return *this;
}
- template
+ template >
UpdateRelatedItemResult& AddTags(TagsKeyT&& key, TagsValueT&& value) {
m_tagsHasBeenSet = true;
m_tags.emplace(std::forward(key), std::forward(value));
return *this;
}
+ inline UpdateRelatedItemResult& AddTags(Aws::String key, Aws::Crt::Optional value) {
+ m_tagsHasBeenSet = true;
+ m_tags.emplace(key, value);
+ return *this;
+ }
///@}
///@{
@@ -200,7 +206,7 @@ class UpdateRelatedItemResult {
Aws::Utils::DateTime m_associationTime{};
- Aws::Map m_tags;
+ Aws::Map> m_tags;
UserUnion m_lastUpdatedUser;
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/AuditEvent.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/AuditEvent.cpp
index 66360f3b98f6..3b99b4269b6a 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/AuditEvent.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/AuditEvent.cpp
@@ -37,7 +37,11 @@ AuditEvent& AuditEvent::operator=(JsonView jsonValue) {
if (jsonValue.ValueExists("fields")) {
Aws::Utils::Array fieldsJsonList = jsonValue.GetArray("fields");
for (unsigned fieldsIndex = 0; fieldsIndex < fieldsJsonList.GetLength(); ++fieldsIndex) {
- m_fields.push_back(fieldsJsonList[fieldsIndex].AsObject());
+ if (fieldsJsonList[fieldsIndex].IsNull()) {
+ m_fields.emplace_back();
+ continue;
+ }
+ m_fields.emplace_back(fieldsJsonList[fieldsIndex].AsObject());
}
m_fieldsHasBeenSet = true;
}
@@ -70,7 +74,11 @@ JsonValue AuditEvent::Jsonize() const {
if (m_fieldsHasBeenSet) {
Aws::Utils::Array fieldsJsonList(m_fields.size());
for (unsigned fieldsIndex = 0; fieldsIndex < fieldsJsonList.GetLength(); ++fieldsIndex) {
- fieldsJsonList[fieldsIndex].AsObject(m_fields[fieldsIndex].Jsonize());
+ if (!m_fields[fieldsIndex].has_value()) {
+ fieldsJsonList[fieldsIndex].AsNull();
+ continue;
+ }
+ fieldsJsonList[fieldsIndex].AsObject(m_fields[fieldsIndex]->Jsonize());
}
payload.WithArray("fields", std::move(fieldsJsonList));
}
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/GetCaseAuditEventsResult.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/GetCaseAuditEventsResult.cpp
index 8f45555be65e..7b9f9ea65f61 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/GetCaseAuditEventsResult.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/GetCaseAuditEventsResult.cpp
@@ -29,7 +29,11 @@ GetCaseAuditEventsResult& GetCaseAuditEventsResult::operator=(const Aws::AmazonW
if (jsonValue.ValueExists("auditEvents")) {
Aws::Utils::Array auditEventsJsonList = jsonValue.GetArray("auditEvents");
for (unsigned auditEventsIndex = 0; auditEventsIndex < auditEventsJsonList.GetLength(); ++auditEventsIndex) {
- m_auditEvents.push_back(auditEventsJsonList[auditEventsIndex].AsObject());
+ if (auditEventsJsonList[auditEventsIndex].IsNull()) {
+ m_auditEvents.emplace_back();
+ continue;
+ }
+ m_auditEvents.emplace_back(auditEventsJsonList[auditEventsIndex].AsObject());
}
m_auditEventsHasBeenSet = true;
}
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/GetCaseResult.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/GetCaseResult.cpp
index b86fc873a4cc..f99350a6f3a5 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/GetCaseResult.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/GetCaseResult.cpp
@@ -40,6 +40,10 @@ GetCaseResult& GetCaseResult::operator=(const Aws::AmazonWebServiceResult tagsJsonMap = jsonValue.GetObject("tags").GetAllObjects();
for (auto& tagsItem : tagsJsonMap) {
+ if (tagsItem.second.IsNull()) {
+ m_tags[tagsItem.first];
+ continue;
+ }
m_tags[tagsItem.first] = tagsItem.second.AsString();
}
m_tagsHasBeenSet = true;
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/GetCaseRuleResponse.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/GetCaseRuleResponse.cpp
index 73d8c393b0f2..b4b3e913f077 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/GetCaseRuleResponse.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/GetCaseRuleResponse.cpp
@@ -53,6 +53,10 @@ GetCaseRuleResponse& GetCaseRuleResponse::operator=(JsonView jsonValue) {
if (jsonValue.ValueExists("tags")) {
Aws::Map tagsJsonMap = jsonValue.GetObject("tags").GetAllObjects();
for (auto& tagsItem : tagsJsonMap) {
+ if (tagsItem.second.IsNull()) {
+ m_tags[tagsItem.first];
+ continue;
+ }
m_tags[tagsItem.first] = tagsItem.second.AsString();
}
m_tagsHasBeenSet = true;
@@ -98,7 +102,11 @@ JsonValue GetCaseRuleResponse::Jsonize() const {
if (m_tagsHasBeenSet) {
JsonValue tagsJsonMap;
for (auto& tagsItem : m_tags) {
- tagsJsonMap.WithString(tagsItem.first, tagsItem.second);
+ if (!tagsItem.second.has_value()) {
+ tagsJsonMap.WithNull(tagsItem.first);
+ continue;
+ }
+ tagsJsonMap.WithString(tagsItem.first, *tagsItem.second);
}
payload.WithObject("tags", std::move(tagsJsonMap));
}
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/GetDomainResult.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/GetDomainResult.cpp
index 964aaa25dfb3..60fc953a26a4 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/GetDomainResult.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/GetDomainResult.cpp
@@ -45,6 +45,10 @@ GetDomainResult& GetDomainResult::operator=(const Aws::AmazonWebServiceResult tagsJsonMap = jsonValue.GetObject("tags").GetAllObjects();
for (auto& tagsItem : tagsJsonMap) {
+ if (tagsItem.second.IsNull()) {
+ m_tags[tagsItem.first];
+ continue;
+ }
m_tags[tagsItem.first] = tagsItem.second.AsString();
}
m_tagsHasBeenSet = true;
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/GetFieldResponse.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/GetFieldResponse.cpp
index 0244a7127e36..ddaebf2457bc 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/GetFieldResponse.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/GetFieldResponse.cpp
@@ -45,6 +45,10 @@ GetFieldResponse& GetFieldResponse::operator=(JsonView jsonValue) {
if (jsonValue.ValueExists("tags")) {
Aws::Map tagsJsonMap = jsonValue.GetObject("tags").GetAllObjects();
for (auto& tagsItem : tagsJsonMap) {
+ if (tagsItem.second.IsNull()) {
+ m_tags[tagsItem.first];
+ continue;
+ }
m_tags[tagsItem.first] = tagsItem.second.AsString();
}
m_tagsHasBeenSet = true;
@@ -98,7 +102,11 @@ JsonValue GetFieldResponse::Jsonize() const {
if (m_tagsHasBeenSet) {
JsonValue tagsJsonMap;
for (auto& tagsItem : m_tags) {
- tagsJsonMap.WithString(tagsItem.first, tagsItem.second);
+ if (!tagsItem.second.has_value()) {
+ tagsJsonMap.WithNull(tagsItem.first);
+ continue;
+ }
+ tagsJsonMap.WithString(tagsItem.first, *tagsItem.second);
}
payload.WithObject("tags", std::move(tagsJsonMap));
}
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/GetLayoutResult.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/GetLayoutResult.cpp
index 451984f27ff5..103fc8085d51 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/GetLayoutResult.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/GetLayoutResult.cpp
@@ -41,6 +41,10 @@ GetLayoutResult& GetLayoutResult::operator=(const Aws::AmazonWebServiceResult tagsJsonMap = jsonValue.GetObject("tags").GetAllObjects();
for (auto& tagsItem : tagsJsonMap) {
+ if (tagsItem.second.IsNull()) {
+ m_tags[tagsItem.first];
+ continue;
+ }
m_tags[tagsItem.first] = tagsItem.second.AsString();
}
m_tagsHasBeenSet = true;
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/GetTemplateResult.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/GetTemplateResult.cpp
index 08aecc55a0b2..36b2dbb90c31 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/GetTemplateResult.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/GetTemplateResult.cpp
@@ -52,6 +52,10 @@ GetTemplateResult& GetTemplateResult::operator=(const Aws::AmazonWebServiceResul
if (jsonValue.ValueExists("tags")) {
Aws::Map tagsJsonMap = jsonValue.GetObject("tags").GetAllObjects();
for (auto& tagsItem : tagsJsonMap) {
+ if (tagsItem.second.IsNull()) {
+ m_tags[tagsItem.first];
+ continue;
+ }
m_tags[tagsItem.first] = tagsItem.second.AsString();
}
m_tagsHasBeenSet = true;
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/ListTagsForResourceResult.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/ListTagsForResourceResult.cpp
index 51e0bdff87d8..996bad0b9b0d 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/ListTagsForResourceResult.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/ListTagsForResourceResult.cpp
@@ -25,6 +25,10 @@ ListTagsForResourceResult& ListTagsForResourceResult::operator=(const Aws::Amazo
if (jsonValue.ValueExists("tags")) {
Aws::Map tagsJsonMap = jsonValue.GetObject("tags").GetAllObjects();
for (auto& tagsItem : tagsJsonMap) {
+ if (tagsItem.second.IsNull()) {
+ m_tags[tagsItem.first];
+ continue;
+ }
m_tags[tagsItem.first] = tagsItem.second.AsString();
}
m_tagsHasBeenSet = true;
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/SearchAllRelatedItemsResponseItem.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/SearchAllRelatedItemsResponseItem.cpp
index b22f459acf02..9483e6fecba5 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/SearchAllRelatedItemsResponseItem.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/SearchAllRelatedItemsResponseItem.cpp
@@ -45,6 +45,10 @@ SearchAllRelatedItemsResponseItem& SearchAllRelatedItemsResponseItem::operator=(
if (jsonValue.ValueExists("tags")) {
Aws::Map tagsJsonMap = jsonValue.GetObject("tags").GetAllObjects();
for (auto& tagsItem : tagsJsonMap) {
+ if (tagsItem.second.IsNull()) {
+ m_tags[tagsItem.first];
+ continue;
+ }
m_tags[tagsItem.first] = tagsItem.second.AsString();
}
m_tagsHasBeenSet = true;
@@ -82,7 +86,11 @@ JsonValue SearchAllRelatedItemsResponseItem::Jsonize() const {
if (m_tagsHasBeenSet) {
JsonValue tagsJsonMap;
for (auto& tagsItem : m_tags) {
- tagsJsonMap.WithString(tagsItem.first, tagsItem.second);
+ if (!tagsItem.second.has_value()) {
+ tagsJsonMap.WithNull(tagsItem.first);
+ continue;
+ }
+ tagsJsonMap.WithString(tagsItem.first, *tagsItem.second);
}
payload.WithObject("tags", std::move(tagsJsonMap));
}
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/SearchAllRelatedItemsResult.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/SearchAllRelatedItemsResult.cpp
index a347fd46553c..1a234266ca02 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/SearchAllRelatedItemsResult.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/SearchAllRelatedItemsResult.cpp
@@ -29,7 +29,11 @@ SearchAllRelatedItemsResult& SearchAllRelatedItemsResult::operator=(const Aws::A
if (jsonValue.ValueExists("relatedItems")) {
Aws::Utils::Array relatedItemsJsonList = jsonValue.GetArray("relatedItems");
for (unsigned relatedItemsIndex = 0; relatedItemsIndex < relatedItemsJsonList.GetLength(); ++relatedItemsIndex) {
- m_relatedItems.push_back(relatedItemsJsonList[relatedItemsIndex].AsObject());
+ if (relatedItemsJsonList[relatedItemsIndex].IsNull()) {
+ m_relatedItems.emplace_back();
+ continue;
+ }
+ m_relatedItems.emplace_back(relatedItemsJsonList[relatedItemsIndex].AsObject());
}
m_relatedItemsHasBeenSet = true;
}
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/SearchCasesResponseItem.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/SearchCasesResponseItem.cpp
index aaa9f68503b0..1d188f38cb1a 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/SearchCasesResponseItem.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/SearchCasesResponseItem.cpp
@@ -36,6 +36,10 @@ SearchCasesResponseItem& SearchCasesResponseItem::operator=(JsonView jsonValue)
if (jsonValue.ValueExists("tags")) {
Aws::Map tagsJsonMap = jsonValue.GetObject("tags").GetAllObjects();
for (auto& tagsItem : tagsJsonMap) {
+ if (tagsItem.second.IsNull()) {
+ m_tags[tagsItem.first];
+ continue;
+ }
m_tags[tagsItem.first] = tagsItem.second.AsString();
}
m_tagsHasBeenSet = true;
@@ -65,7 +69,11 @@ JsonValue SearchCasesResponseItem::Jsonize() const {
if (m_tagsHasBeenSet) {
JsonValue tagsJsonMap;
for (auto& tagsItem : m_tags) {
- tagsJsonMap.WithString(tagsItem.first, tagsItem.second);
+ if (!tagsItem.second.has_value()) {
+ tagsJsonMap.WithNull(tagsItem.first);
+ continue;
+ }
+ tagsJsonMap.WithString(tagsItem.first, *tagsItem.second);
}
payload.WithObject("tags", std::move(tagsJsonMap));
}
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/SearchCasesResult.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/SearchCasesResult.cpp
index d4d3fa7e0975..58b56654cf61 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/SearchCasesResult.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/SearchCasesResult.cpp
@@ -29,7 +29,11 @@ SearchCasesResult& SearchCasesResult::operator=(const Aws::AmazonWebServiceResul
if (jsonValue.ValueExists("cases")) {
Aws::Utils::Array casesJsonList = jsonValue.GetArray("cases");
for (unsigned casesIndex = 0; casesIndex < casesJsonList.GetLength(); ++casesIndex) {
- m_cases.push_back(casesJsonList[casesIndex].AsObject());
+ if (casesJsonList[casesIndex].IsNull()) {
+ m_cases.emplace_back();
+ continue;
+ }
+ m_cases.emplace_back(casesJsonList[casesIndex].AsObject());
}
m_casesHasBeenSet = true;
}
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/SearchRelatedItemsResponseItem.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/SearchRelatedItemsResponseItem.cpp
index 5c8bee6ea96f..b1991569ab64 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/SearchRelatedItemsResponseItem.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/SearchRelatedItemsResponseItem.cpp
@@ -37,6 +37,10 @@ SearchRelatedItemsResponseItem& SearchRelatedItemsResponseItem::operator=(JsonVi
if (jsonValue.ValueExists("tags")) {
Aws::Map tagsJsonMap = jsonValue.GetObject("tags").GetAllObjects();
for (auto& tagsItem : tagsJsonMap) {
+ if (tagsItem.second.IsNull()) {
+ m_tags[tagsItem.first];
+ continue;
+ }
m_tags[tagsItem.first] = tagsItem.second.AsString();
}
m_tagsHasBeenSet = true;
@@ -70,7 +74,11 @@ JsonValue SearchRelatedItemsResponseItem::Jsonize() const {
if (m_tagsHasBeenSet) {
JsonValue tagsJsonMap;
for (auto& tagsItem : m_tags) {
- tagsJsonMap.WithString(tagsItem.first, tagsItem.second);
+ if (!tagsItem.second.has_value()) {
+ tagsJsonMap.WithNull(tagsItem.first);
+ continue;
+ }
+ tagsJsonMap.WithString(tagsItem.first, *tagsItem.second);
}
payload.WithObject("tags", std::move(tagsJsonMap));
}
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/SearchRelatedItemsResult.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/SearchRelatedItemsResult.cpp
index b131c66a8ae6..698cead4e5d8 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/SearchRelatedItemsResult.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/SearchRelatedItemsResult.cpp
@@ -29,7 +29,11 @@ SearchRelatedItemsResult& SearchRelatedItemsResult::operator=(const Aws::AmazonW
if (jsonValue.ValueExists("relatedItems")) {
Aws::Utils::Array relatedItemsJsonList = jsonValue.GetArray("relatedItems");
for (unsigned relatedItemsIndex = 0; relatedItemsIndex < relatedItemsJsonList.GetLength(); ++relatedItemsIndex) {
- m_relatedItems.push_back(relatedItemsJsonList[relatedItemsIndex].AsObject());
+ if (relatedItemsJsonList[relatedItemsIndex].IsNull()) {
+ m_relatedItems.emplace_back();
+ continue;
+ }
+ m_relatedItems.emplace_back(relatedItemsJsonList[relatedItemsIndex].AsObject());
}
m_relatedItemsHasBeenSet = true;
}
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/TagResourceRequest.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/TagResourceRequest.cpp
index 93f3d02f033f..0b5b5cfea034 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/TagResourceRequest.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/TagResourceRequest.cpp
@@ -18,7 +18,11 @@ Aws::String TagResourceRequest::SerializePayload() const {
if (m_tagsHasBeenSet) {
JsonValue tagsJsonMap;
for (auto& tagsItem : m_tags) {
- tagsJsonMap.WithString(tagsItem.first, tagsItem.second);
+ if (!tagsItem.second.has_value()) {
+ tagsJsonMap.WithNull(tagsItem.first);
+ continue;
+ }
+ tagsJsonMap.WithString(tagsItem.first, *tagsItem.second);
}
payload.WithObject("tags", std::move(tagsJsonMap));
}
diff --git a/generated/src/aws-cpp-sdk-connectcases/source/model/UpdateRelatedItemResult.cpp b/generated/src/aws-cpp-sdk-connectcases/source/model/UpdateRelatedItemResult.cpp
index bfc7df385336..ffa7a4ba949b 100644
--- a/generated/src/aws-cpp-sdk-connectcases/source/model/UpdateRelatedItemResult.cpp
+++ b/generated/src/aws-cpp-sdk-connectcases/source/model/UpdateRelatedItemResult.cpp
@@ -45,6 +45,10 @@ UpdateRelatedItemResult& UpdateRelatedItemResult::operator=(const Aws::AmazonWeb
if (jsonValue.ValueExists("tags")) {
Aws::Map tagsJsonMap = jsonValue.GetObject("tags").GetAllObjects();
for (auto& tagsItem : tagsJsonMap) {
+ if (tagsItem.second.IsNull()) {
+ m_tags[tagsItem.first];
+ continue;
+ }
m_tags[tagsItem.first] = tagsItem.second.AsString();
}
m_tagsHasBeenSet = true;
diff --git a/src/aws-cpp-sdk-core/include/aws/core/utils/json/JsonSerializer.h b/src/aws-cpp-sdk-core/include/aws/core/utils/json/JsonSerializer.h
index 8b2ccc139bb5..fabbe7aaf33c 100644
--- a/src/aws-cpp-sdk-core/include/aws/core/utils/json/JsonSerializer.h
+++ b/src/aws-cpp-sdk-core/include/aws/core/utils/json/JsonSerializer.h
@@ -94,6 +94,17 @@ namespace Aws
JsonValue& WithString(const Aws::String& key, const Aws::String& value);
JsonValue& WithString(const char* key, const Aws::String& value);
+ /**
+ * Adds a null value to the top level of this node with key.
+ */
+ JsonValue& WithNull(const Aws::String& key);
+ JsonValue& WithNull(const char* key);
+
+ /**
+ * Converts the current JSON node to null.
+ */
+ JsonValue& AsNull();
+
/**
* Converts the current JSON node to a string.
*/
diff --git a/src/aws-cpp-sdk-core/source/utils/json/JsonSerializer.cpp b/src/aws-cpp-sdk-core/source/utils/json/JsonSerializer.cpp
index 3cdcac1a8127..25edf4363e9c 100644
--- a/src/aws-cpp-sdk-core/source/utils/json/JsonSerializer.cpp
+++ b/src/aws-cpp-sdk-core/source/utils/json/JsonSerializer.cpp
@@ -153,6 +153,30 @@ JsonValue& JsonValue::WithString(const Aws::String& key, const Aws::String& valu
return WithString(key.c_str(), value);
}
+JsonValue& JsonValue::WithNull(const char* key)
+{
+ if (!m_value)
+ {
+ m_value = cJSON_AS4CPP_CreateObject();
+ }
+
+ const auto val = cJSON_AS4CPP_CreateNull();
+ AddOrReplace(m_value, key, val);
+ return *this;
+}
+
+JsonValue& JsonValue::WithNull(const Aws::String& key)
+{
+ return WithNull(key.c_str());
+}
+
+JsonValue& JsonValue::AsNull()
+{
+ Destroy();
+ m_value = cJSON_AS4CPP_CreateNull();
+ return *this;
+}
+
JsonValue& JsonValue::AsString(const Aws::String& value)
{
Destroy();
diff --git a/tests/aws-cpp-sdk-core-tests/utils/json/JsonSerializerTest.cpp b/tests/aws-cpp-sdk-core-tests/utils/json/JsonSerializerTest.cpp
index 12234707833f..00f313f9752d 100644
--- a/tests/aws-cpp-sdk-core-tests/utils/json/JsonSerializerTest.cpp
+++ b/tests/aws-cpp-sdk-core-tests/utils/json/JsonSerializerTest.cpp
@@ -434,6 +434,39 @@ TEST_F(JsonSerializerTest, TestGetAllObjects)
ASSERT_EQ(42, all["Key2"].AsInteger());
}
+TEST_F(JsonSerializerTest, TestWithNull)
+{
+ JsonValue value;
+ value.WithString("Key1", "value1");
+ value.WithNull("Key2");
+ value.WithNull(Aws::String("Key3"));
+ value.WithInteger("Key4", 42);
+
+ auto view = value.View();
+
+ ASSERT_TRUE(view.KeyExists("Key2"));
+ ASSERT_FALSE(view.ValueExists("Key2"));
+ ASSERT_TRUE(view.GetObject("Key2").IsNull());
+
+ ASSERT_TRUE(view.KeyExists("Key3"));
+ ASSERT_FALSE(view.ValueExists("Key3"));
+ ASSERT_TRUE(view.GetObject("Key3").IsNull());
+
+ ASSERT_STREQ("value1", view.GetString("Key1").c_str());
+ ASSERT_EQ(42, view.GetInteger("Key4"));
+
+ Aws::String serialized = view.WriteCompact();
+ JsonValue reparsed(serialized);
+ ASSERT_TRUE(reparsed.WasParseSuccessful());
+ auto reparsedView = reparsed.View();
+ ASSERT_TRUE(reparsedView.KeyExists("Key2"));
+ ASSERT_FALSE(reparsedView.ValueExists("Key2"));
+ ASSERT_TRUE(reparsedView.GetObject("Key2").IsNull());
+ ASSERT_TRUE(reparsedView.KeyExists("Key3"));
+ ASSERT_FALSE(reparsedView.ValueExists("Key3"));
+ ASSERT_TRUE(reparsedView.GetObject("Key3").IsNull());
+}
+
TEST_F(JsonSerializerTest, TestEquality)
{
auto input = R"({"AWS" : {
diff --git a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/c2j/C2jShape.java b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/c2j/C2jShape.java
index fdcde4780145..af13deb827bb 100644
--- a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/c2j/C2jShape.java
+++ b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/c2j/C2jShape.java
@@ -36,4 +36,5 @@ public class C2jShape {
private boolean sensitive;
private boolean document;
private Map retryable;
+ private boolean sparse;
}
diff --git a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/codegeneration/Shape.java b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/codegeneration/Shape.java
index fe953ce7a6b7..478056141298 100644
--- a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/codegeneration/Shape.java
+++ b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/codegeneration/Shape.java
@@ -63,6 +63,7 @@ public class Shape {
private boolean overrideStreaming = false;
private boolean requestCompressionRequired=false;
private boolean requestCompressionRequiredGzip=false;
+ private boolean sparse=false;
public boolean isMap() {
return "map".equals(type.toLowerCase());
diff --git a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/codegeneration/cpp/CppCborViewHelper.java b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/codegeneration/cpp/CppCborViewHelper.java
deleted file mode 100644
index f25de52358f8..000000000000
--- a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/codegeneration/cpp/CppCborViewHelper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.cpp;
-
-import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.Shape;
-import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.ShapeMember;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class CppCborViewHelper extends CppViewHelper {
- private static final Map CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING = new HashMap<>();
-
- static {
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("long", "long long");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("integer", "int64_t");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("string", "Aws::String");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("timestamp", "Aws::Utils::DateTime");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("boolean", "bool");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("sensitive_boolean", "bool");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("double", "double");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("float", "double");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("blob", "Aws::Utils::ByteBuffer");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("sensitive_blob", "Aws::Utils::CryptoBuffer");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("sensitive_long", "long long");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("sensitive_integer", "int64_t");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("sensitive_float", "double");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("sensitive_double", "double");
- CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("sensitive_timestamp", "Aws::Utils::DateTime");
- }
-
- public static String computeCppType(Shape shape) {
- return computeCppTypeInternal(shape, CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING);
- }
-
- public static String computeCppType(Shape parent, String member) {
- if (!parent.getMembers().containsKey(member)) {
- throw new RuntimeException("Parent shape " + parent.getName() +
- " does not contain member key " + member);
- }
- ShapeMember shapeMember = parent.getMembers().get(member);
- Shape childShape = shapeMember.getShape();
-
- if (parent.getPayload() != null && parent.getPayload().equals(member) && parent.isResult()) {
- if (shapeMember.isStreaming() || childShape.isBlob() || childShape.isString()) {
- return "Aws::Utils::Stream::ResponseStream";
- }
- }
- return computeCppType(childShape);
- }
-}
diff --git a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/codegeneration/cpp/CppViewHelper.java b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/codegeneration/cpp/CppViewHelper.java
index 9c215a955ca3..a7cec4a38e51 100644
--- a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/codegeneration/cpp/CppViewHelper.java
+++ b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/domainmodels/codegeneration/cpp/CppViewHelper.java
@@ -15,6 +15,7 @@
import java.lang.RuntimeException;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@@ -26,6 +27,7 @@
public class CppViewHelper {
private static final Map CORAL_TYPE_TO_CPP_TYPE_MAPPING = new HashMap<>();
+ private static final Map CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING = new HashMap<>();
private static final Map CORAL_TYPE_TO_JSON_CPP_TYPE_MAPPING = new HashMap<>();
private static final Map CORAL_TYPE_TO_XML_CONVERSION_MAPPING = new HashMap<>();
private static final Map CORAL_TYPE_TO_DEFAULT_VALUES = new HashMap<>();
@@ -56,6 +58,9 @@ public class CppViewHelper {
CORAL_TYPE_TO_CPP_TYPE_MAPPING.put("sensitive_double", "double");
CORAL_TYPE_TO_CPP_TYPE_MAPPING.put("sensitive_timestamp", "Aws::Utils::DateTime");
+ CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("integer", "int64_t");
+ CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING.put("sensitive_integer", "int64_t");
+
CORAL_TYPE_TO_JSON_CPP_TYPE_MAPPING.put("long", "Int64");
CORAL_TYPE_TO_JSON_CPP_TYPE_MAPPING.put("integer", "Integer");
CORAL_TYPE_TO_JSON_CPP_TYPE_MAPPING.put("string", "String");
@@ -205,8 +210,12 @@ public static String computeJsonizeString(Shape shape) {
}
static String computeCppTypeInternal(Shape shape, Map typeMapping) {
+ return computeCppTypeInternal(shape, typeMapping, Collections.emptyMap());
+ }
+
+ static String computeCppTypeInternal(Shape shape, Map typeMapping, Map overrideMapping) {
String sensitivePrefix = shape.isSensitive() ? "sensitive_" : "";
- String cppType = typeMapping.get(sensitivePrefix + shape.getType());
+ String cppType = overrideMapping.getOrDefault(sensitivePrefix + shape.getType(), typeMapping.get(sensitivePrefix + shape.getType()));
//enum types show up as string
if(cppType != null && !shape.isEnum()) {
@@ -224,13 +233,15 @@ else if(shape.isStructure() || shape.isEnum())
}
else if(shape.isList()) {
- String type = computeCppTypeInternal(shape.getListMember().getShape(), typeMapping);
+ String type = computeCppTypeInternal(shape.getListMember().getShape(), typeMapping, overrideMapping);
+ type = shape.isSparse() ? String.format("Aws::Crt::Optional<%s>", type) : type;
return String.format("Aws::Vector<%s>", type);
}
else if(shape.isMap()) {
- String key = computeCppTypeInternal(shape.getMapKey().getShape(), typeMapping);
- String value = computeCppTypeInternal(shape.getMapValue().getShape(), typeMapping);
+ String key = computeCppTypeInternal(shape.getMapKey().getShape(), typeMapping, overrideMapping);
+ String value = computeCppTypeInternal(shape.getMapValue().getShape(), typeMapping, overrideMapping);
+ value = shape.isSparse() ? String.format("Aws::Crt::Optional<%s>", value) : value;
return String.format("Aws::Map<%s, %s>", key, value);
}
@@ -243,6 +254,16 @@ public static String computeCppType(Shape shape) {
return computeCppTypeInternal(shape, CORAL_TYPE_TO_CPP_TYPE_MAPPING);
}
+ public static String computeCborCppType(Shape shape) {
+ return computeCppTypeInternal(shape, CORAL_TYPE_TO_CPP_TYPE_MAPPING, CORAL_TYPE_TO_CBOR_CPP_TYPE_MAPPING);
+ }
+
+ public static String computeResultCppType(Shape shape, String protocol) {
+ return "smithy-rpc-v2-cbor".equals(protocol)
+ ? computeCborCppType(shape)
+ : computeCppType(shape);
+ }
+
public static boolean isStreamingPayloadMember(Shape parent, String member) {
if (!parent.getMembers().containsKey(member)) {
throw new RuntimeException("Parent shape " + parent.getName() +
@@ -275,6 +296,22 @@ public static String computeCppType(Shape parent, String member) {
return computeCppType(childShape);
}
+ public static String computeCborCppType(Shape parent, String member) {
+ if (!parent.getMembers().containsKey(member)) {
+ throw new RuntimeException("Parent shape " + parent.getName() +
+ " does not contain member key " + member);
+ }
+ ShapeMember shapeMember = parent.getMembers().get(member);
+ Shape childShape = shapeMember.getShape();
+
+ if (parent.getPayload() != null && parent.getPayload().equals(member) && parent.isResult()) {
+ if (shapeMember.isStreaming() || childShape.isBlob() || childShape.isString()) {
+ return "Aws::Utils::Stream::ResponseStream";
+ }
+ }
+ return computeCborCppType(childShape);
+ }
+
public static String computeJsonCppType(Shape shape) {
if(shape.isTimeStamp() && shape.getTimestampFormat() != null) {
return CORAL_TYPE_TO_JSON_CPP_TYPE_MAPPING.get(shape.getTimestampFormat().toLowerCase());
@@ -387,6 +424,9 @@ public static Set computeHeaderIncludes(String projectName, Shape shape)
headers.add(formatModelIncludeName(projectName, shapeInList));
}
}
+ if (next.isSparse()) {
+ headers.add("");
+ }
if(!next.isPrimitive()) {
if (next.isException() && !next.isModeledException()) {
// C++ SDK code generator skips generating exceptions that can be expressed using
diff --git a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/generators/cpp/CborCppClientGenerator.java b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/generators/cpp/CborCppClientGenerator.java
index 305f532e80c4..5cbda5cc955f 100644
--- a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/generators/cpp/CborCppClientGenerator.java
+++ b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/generators/cpp/CborCppClientGenerator.java
@@ -10,7 +10,6 @@
import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.ServiceModel;
import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.Shape;
import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.ShapeMember;
-import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.cpp.CppCborViewHelper;
import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.cpp.CppShapeInformation;
import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.cpp.CppViewHelper;
import org.apache.velocity.Template;
@@ -35,7 +34,7 @@ protected SdkFileEntry generateErrorMarshallerHeaderFile(ServiceModel serviceMod
Template template = velocityEngine.getTemplate("/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborErrorMarshallerHeader.vm", StandardCharsets.UTF_8.name());
VelocityContext context = createContext(serviceModel);
- context.put("CppViewHelper", CppCborViewHelper.class);
+ context.put("CppViewHelper", CppViewHelper.class);
String fileName = String.format("include/aws/%s/%sErrorMarshaller.h",
serviceModel.getMetadata().getProjectName(), serviceModel.getMetadata().getClassNamePrefix());
@@ -79,7 +78,7 @@ protected SdkFileEntry generateModelHeaderFile(ServiceModel serviceModel, Map.En
context.put("shape", shape);
context.put("typeInfo", new CppShapeInformation(shape, serviceModel));
- context.put("CppViewHelper", CppCborViewHelper.class);
+ context.put("CppViewHelper", CppViewHelper.class);
String fileName = String.format("include/aws/%s/model/%s.h", serviceModel.getMetadata().getProjectName(),
shapeEntry.getKey());
@@ -147,7 +146,7 @@ else if (shape.isResult()) {
context.put("shape", shape);
context.put("typeInfo", new CppShapeInformation(shape, serviceModel));
- context.put("CppViewHelper", CppCborViewHelper.class);
+ context.put("CppViewHelper", CppViewHelper.class);
String fileName = String.format("source/model/%s.cpp", shapeEntry.getKey());
@@ -166,7 +165,7 @@ protected SdkFileEntry generateClientHeaderFile(final ServiceModel serviceModel)
Template template = velocityEngine.getTemplate("/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborServiceClientHeader.vm", StandardCharsets.UTF_8.name());
VelocityContext context = createContext(serviceModel);
- context.put("CppViewHelper", CppCborViewHelper.class);
+ context.put("CppViewHelper", CppViewHelper.class);
context.put("RequestlessOperations", requestlessOperations);
String fileName = String.format("include/aws/%s/%sClient.h", serviceModel.getMetadata().getProjectName(),
diff --git a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/generators/cpp/CppProtocolTestGenerator.java b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/generators/cpp/CppProtocolTestGenerator.java
index 43154aa5ad36..82c1746c8917 100644
--- a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/generators/cpp/CppProtocolTestGenerator.java
+++ b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/generators/cpp/CppProtocolTestGenerator.java
@@ -11,7 +11,6 @@
import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.Shape;
import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.ShapeMember;
-import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.cpp.CppCborViewHelper;
import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.cpp.CppViewHelper;
import com.amazonaws.util.awsclientgenerator.domainmodels.protocol_test.ProtocolTestModel;
import com.amazonaws.util.awsclientgenerator.domainmodels.protocol_test.ProtocolTestSuite;
@@ -115,11 +114,7 @@ protected final VelocityContext createContext() {
context.put("testModel", testModel);
context.put("input.encoding", StandardCharsets.UTF_8.name());
context.put("output.encoding", StandardCharsets.UTF_8.name());
- if(serviceModel.getMetadata().getProtocol().equals("smithy-rpc-v2-cbor")){
- context.put("CppViewHelper", CppCborViewHelper.class);
- } else {
- context.put("CppViewHelper", CppViewHelper.class);
- }
+ context.put("CppViewHelper", CppViewHelper.class);
return context;
}
diff --git a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/transform/C2jModelToGeneratorModelTransformer.java b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/transform/C2jModelToGeneratorModelTransformer.java
index 1838d2c7b59a..89ed4e05ab95 100644
--- a/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/transform/C2jModelToGeneratorModelTransformer.java
+++ b/tools/code-generation/generator/src/main/java/com/amazonaws/util/awsclientgenerator/transform/C2jModelToGeneratorModelTransformer.java
@@ -439,6 +439,10 @@ Shape convertShapeBasics(C2jShape c2jShape, String shapeName) {
shape.setEvent(c2jShape.isEvent());
shape.setException(c2jShape.isException());
shape.setDocument(c2jShape.isDocument());
+ shape.setSparse(c2jShape.isSparse());
+ if (shape.isSparse() && !shape.isList() && !shape.isMap()) {
+ throw new SourceGenerationFailedException("The sparse trait is only applicable to list and map shapes, but was found on shape: " + shape.getName());
+ }
if (c2jShape.getXmlNamespace() != null) {
XmlNamespace xmlns = new XmlNamespace();
@@ -850,6 +854,7 @@ Shape cloneShape(Shape shape) {
cloned.setException(shape.isException());
cloned.setXmlNamespace(shape.getXmlNamespace());
cloned.setDocument(shape.isDocument());
+ cloned.setSparse(shape.isSparse());
return cloned;
}
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/ModelClassHeaderMembersSource.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/ModelClassHeaderMembersSource.vm
index ba5ccc5bed0a..de43e1bd99a8 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/ModelClassHeaderMembersSource.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/ModelClassHeaderMembersSource.vm
@@ -42,7 +42,11 @@
${spaces}for(const auto& item : $memberVarName)
${spaces}{
${spaces} ss << "${locationName}" << item.first;
+#if($member.shape.sparse)
+ ${spaces} if(item.second.has_value()) { headers.emplace(ss.str(), item.second.value()); }
+#else
${spaces} headers.emplace(ss.str(), item.second);
+#end
${spaces} ss.str("");
${spaces}}
#elseif($member.shape.list)
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/ModelClassMembersAndInlines.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/ModelClassMembersAndInlines.vm
index 19804fce8c45..483a35ca0a63 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/ModelClassMembersAndInlines.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/ModelClassMembersAndInlines.vm
@@ -18,7 +18,7 @@
#set($cppType = "${metadata.classNamePrefix}Error")
#set($isStream = false)
#else
-#set($cppType = $CppViewHelper.computeCppType($member.value.shape))
+#set($cppType = $CppViewHelper.computeResultCppType($member.value.shape, $protocol))
#set($isStream = false)
#end
#set($subShape = $member.value.shape)
@@ -52,7 +52,7 @@
#elseif($member.value.shape.isMutuallyReferencedWith($shape) || $member.value.shape.getName() == $shape.getName())
#set($getterBody = "{$nl return *${memberVariableName};$nl }")
#set($setterWithCopy = ";")
-#set($setterWithMove = " {$nl ${setHasBeenSet}$nl ${memberVariableName} = Aws::MakeShared<$CppViewHelper.computeCppType($member.value.shape)>(" + '"' + "${typeInfo.className}" + '"' + ", std::forward<${memberKeyWithFirstLetterCapitalized}T>(value));$nl }")
+#set($setterWithMove = " {$nl ${setHasBeenSet}$nl ${memberVariableName} = Aws::MakeShared<$CppViewHelper.computeResultCppType($member.value.shape, $protocol)>(" + '"' + "${typeInfo.className}" + '"' + ", std::forward<${memberKeyWithFirstLetterCapitalized}T>(value));$nl }")
#elseif($member.value.isChecksumMember())
#set($getterBody = " { return ${memberVariableName}; }")
#set($setterWithCopy = " { ${setHasBeenSet}${memberVariableName} = value; SetChecksumAlgorithm(ChecksumAlgorithm::${member.value.getChecksumEnumMember()}); }")
@@ -109,8 +109,26 @@
#end
#if($member.value.shape.map)
#set($mapMember = $member.value.shape)
-#set($keyType = $CppViewHelper.computeCppType($mapMember.mapKey.shape))
-#set($valueType = $CppViewHelper.computeCppType($mapMember.mapValue.shape))
+#set($keyType = $CppViewHelper.computeResultCppType($mapMember.mapKey.shape, $protocol))
+#set($valueType = $CppViewHelper.computeResultCppType($mapMember.mapValue.shape, $protocol))
+#if($mapMember.sparse)
+#set($optionalValueType = "Aws::Crt::Optional<${valueType}>")
+#if(!$mapMember.mapKey.shape.primitive && !$mapMember.mapKey.shape.enum && !$mapMember.mapValue.shape.primitive && !$mapMember.mapValue.shape.enum)
+#set($keyTemplType = "${memberKeyWithFirstLetterCapitalized}KeyT")
+#set($valueTemplType = "${memberKeyWithFirstLetterCapitalized}ValueT")
+ template
+ ${classNameRef} Add${memberKeyWithFirstLetterCapitalized}(${keyTemplType}&& key, ${valueTemplType}&& value) {
+ ${setHasBeenSet}${memberVariableName}.emplace(std::forward<${keyTemplType}>(key), std::forward<${valueTemplType}>(value)); return *this;
+ }
+#else
+ ${inline}${classNameRef} Add${memberKeyWithFirstLetterCapitalized}(${keyType} key, ${valueType} value) {
+ ${setHasBeenSet}${memberVariableName}.emplace(key, value); return *this;
+ }
+#end
+ ${inline}${classNameRef} Add${memberKeyWithFirstLetterCapitalized}(${keyType} key, ${optionalValueType} value) {
+ ${setHasBeenSet}${memberVariableName}.emplace(key, value); return *this;
+ }
+#else
#if(!$mapMember.mapKey.shape.primitive && !$mapMember.mapKey.shape.enum && !$mapMember.mapValue.shape.primitive && !$mapMember.mapValue.shape.enum)
#set($keyTemplType = "${memberKeyWithFirstLetterCapitalized}KeyT")
#set($valueTemplType = "${memberKeyWithFirstLetterCapitalized}ValueT")
@@ -124,9 +142,21 @@
}
#end
#end
+#end
#if($member.value.shape.list)
#set($listMember = $member.value.shape)
-#set($valueType = $CppViewHelper.computeCppType($listMember.listMember.shape))
+#set($valueType = $CppViewHelper.computeResultCppType($listMember.listMember.shape, $protocol))
+#if($listMember.sparse)
+#set($optionalValueType = "Aws::Crt::Optional<${valueType}>")
+#if(!$listMember.listMember.shape.primitive && !$listMember.listMember.shape.enum)
+#set($valueTemplType = "${memberKeyWithFirstLetterCapitalized}T")
+ template
+ ${classNameRef} Add${memberKeyWithFirstLetterCapitalized}(${valueTemplType}&& value) { ${setHasBeenSet}${memberVariableName}.emplace_back(std::forward<${valueTemplType}>(value)); return *this; }
+#else
+ ${inline}${classNameRef} Add${memberKeyWithFirstLetterCapitalized}(${valueType} value)$adderWithCopy
+#end
+ ${inline}${classNameRef} Add${memberKeyWithFirstLetterCapitalized}(${optionalValueType} value)$adderWithCopy
+#else
#if(!$listMember.listMember.shape.primitive && !$listMember.listMember.shape.enum)
#set($valueTemplType = "${memberKeyWithFirstLetterCapitalized}T")
template
@@ -134,6 +164,7 @@
#else
${inline}${classNameRef} Add${memberKeyWithFirstLetterCapitalized}(${valueType} value)$adderWithCopy
#end
+#end
#end
///@}
#end##if(!($CppViewHelper.isStreamingPayloadMember($shape, $member.key) && $shape.request))
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborDecodeListValue.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborDecodeListValue.vm
index 9a47a159e28b..73129f37e651 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborDecodeListValue.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborDecodeListValue.vm
@@ -1,7 +1,24 @@
+#set($parentListDepth = $recursionDepth - 1)
+#if($member.shape.sparse)
+{
+ auto nullPeek_${recursionDepth} = decoder->PeekType();
+ if (nullPeek_${recursionDepth}.has_value() && nullPeek_${recursionDepth}.value() == Aws::Crt::Cbor::CborType::Null) {
+ decoder->ConsumeNextSingleElement();
+#if($parentListDepth == 0)
+ ${memberVarName}.emplace_back();
+#else
+ nestedList_${parentListDepth}.emplace_back();
+#end
+ } else {
+#end
#if($shapeMember.enum)
auto ${containerVar} = decoder->PopNextTextVal();
if (${containerVar}.has_value()) {
- ${value}.push_back(${shapeMember.name}Mapper::Get${shapeMember.name}ForName(Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len)));
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(${shapeMember.name}Mapper::Get${shapeMember.name}ForName(Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len)));
+#else
+ nestedList_${parentListDepth}.push_back(${shapeMember.name}Mapper::Get${shapeMember.name}ForName(Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len)));
+#end
}
#elseif($shapeMember.string)
auto peekType_${recursionDepth} = decoder->PeekType();
@@ -9,7 +26,11 @@ if(peekType_${recursionDepth}.has_value()){
if (peekType_${recursionDepth}.value() == Aws::Crt::Cbor::CborType::Text) {
auto ${containerVar} = decoder->PopNextTextVal();
if (${containerVar}.has_value()) {
- ${value}.push_back(Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len));
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len));
+#else
+ nestedList_${parentListDepth}.push_back(Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len));
+#end
}
} else {
decoder->ConsumeNextSingleElement();
@@ -27,24 +48,40 @@ if(peekType_${recursionDepth}.has_value()){
ss_${recursionDepth} << Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len);
}
}
- ${value}.push_back(ss_${recursionDepth}.str());
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(ss_${recursionDepth}.str());
+#else
+ nestedList_${parentListDepth}.push_back(ss_${recursionDepth}.str());
+#end
ss_${recursionDepth}.clear();
}
}
#elseif($shapeMember.boolean)
auto ${containerVar} = decoder->PopNextBooleanVal();
if (${containerVar}.has_value()) {
- ${value}.push_back(${containerVar}.value());
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(${containerVar}.value());
+#else
+ nestedList_${parentListDepth}.push_back(${containerVar}.value());
+#end
}
#elseif($shapeMember.double)
auto ${containerVar} = decoder->PopNextFloatVal();
if (${containerVar}.has_value()) {
- ${value}.push_back(${containerVar}.value());
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(${containerVar}.value());
+#else
+ nestedList_${parentListDepth}.push_back(${containerVar}.value());
+#end
}
#elseif($shapeMember.float)
auto ${containerVar} = decoder->PopNextFloatVal();
if (${containerVar}.has_value()) {
- ${value}.push_back(${containerVar}.value());
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(${containerVar}.value());
+#else
+ nestedList_${parentListDepth}.push_back(${containerVar}.value());
+#end
}
#elseif($shapeMember.blob)
auto peekType_${recursionDepth} = decoder->PeekType();
@@ -52,7 +89,11 @@ if(peekType_${recursionDepth}.has_value()){
if (peekType_${recursionDepth}.value() == Aws::Crt::Cbor::CborType::Bytes) {
auto ${containerVar} = decoder->PopNextBytesVal();
if (${containerVar}.has_value()) {
- ${value}.push_back(Aws::Utils::ByteBuffer(${containerVar}.value().ptr, ${containerVar}.value().len));
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(Aws::Utils::ByteBuffer(${containerVar}.value().ptr, ${containerVar}.value().len));
+#else
+ nestedList_${parentListDepth}.push_back(Aws::Utils::ByteBuffer(${containerVar}.value().ptr, ${containerVar}.value().len));
+#end
}
} else {
decoder->ConsumeNextSingleElement();
@@ -70,7 +111,11 @@ if(peekType_${recursionDepth}.has_value()){
ss_${recursionDepth} << Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len);
}
}
- ${value}.push_back(Aws::Utils::ByteBuffer(ss_${recursionDepth}.str()));
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(Aws::Utils::ByteBuffer(ss_${recursionDepth}.str()));
+#else
+ nestedList_${parentListDepth}.push_back(Aws::Utils::ByteBuffer(ss_${recursionDepth}.str()));
+#end
ss_${recursionDepth}.clear();
}
}
@@ -85,27 +130,47 @@ if(peekType_${recursionDepth}.has_value()){
{
auto ${containerVar} = decoder->PopNextFloatVal();
if (${containerVar}.has_value()) {
- ${value}.push_back(Aws::Utils::DateTime(${containerVar}.value()));
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(Aws::Utils::DateTime(${containerVar}.value()));
+#else
+ nestedList_${parentListDepth}.push_back(Aws::Utils::DateTime(${containerVar}.value()));
+#end
}
}
else
{
auto ${containerVar} = decoder->PopNextUnsignedIntVal();
if (${containerVar}.has_value()) {
- ${value}.push_back(Aws::Utils::DateTime(${containerVar}.value()));
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(Aws::Utils::DateTime(${containerVar}.value()));
+#else
+ nestedList_${parentListDepth}.push_back(Aws::Utils::DateTime(${containerVar}.value()));
+#end
}
}
}
}
#elseif($shapeMember.structure)
#if($member.shape.isMutuallyReferencedWith($shape) || $member.shape.getName() == $shape.getName())
- ${value}.push_back(Aws::MakeShared<${shapeMember.name}>("${typeInfo.className}", ${shapeMember.name}(decoder)));
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(Aws::MakeShared<${shapeMember.name}>("${typeInfo.className}", ${shapeMember.name}(decoder)));
+#else
+ nestedList_${parentListDepth}.push_back(Aws::MakeShared<${shapeMember.name}>("${typeInfo.className}", ${shapeMember.name}(decoder)));
+#end
#else
- ${value}.push_back(${shapeMember.name}(decoder));
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(${shapeMember.name}(decoder));
+#else
+ nestedList_${parentListDepth}.push_back(${shapeMember.name}(decoder));
+#end
#end
#elseif($shapeMember.list)
#set($template.nestedShapeMember = $shapeMember.listMember.shape)
+#if($shapeMember.sparse)
+ auto nestedList_${recursionDepth} = Vector>();
+#else
auto nestedList_${recursionDepth} = Vector<$CppViewHelper.computeCppType($template.nestedShapeMember)>();
+#end
auto peekType_${recursionDepth} = decoder->PeekType();
if (peekType_${recursionDepth}.has_value() && (peekType_${recursionDepth}.value() == CborType::ArrayStart || peekType_${recursionDepth}.value() == CborType::IndefArrayStart))
{
@@ -145,14 +210,18 @@ if(peekType_${recursionDepth}.has_value()){
}
#if($recursionDepth > 1)
#set($parentDepth = $recursionDepth - 1)
- nestedList_${parentDepth}.push_back(${value});
+ nestedList_${parentDepth}.push_back(nestedList_${recursionDepth});
#else
${memberVarName}.push_back(nestedList_${recursionDepth});
#end
}
#elseif($shapeMember.map)
#set($template.nestedShapeMember = $shapeMember.mapValue.shape)
+#if($shapeMember.sparse)
+ auto nestedMap_${recursionDepth} = Map>();
+#else
auto nestedMap_${recursionDepth} = Map();
+#end
auto peekType_${recursionDepth} = decoder->PeekType();
if (peekType_${recursionDepth}.has_value() && (peekType_${recursionDepth}.value() == CborType::MapStart || peekType_${recursionDepth}.value() == CborType::IndefMapStart))
{
@@ -191,7 +260,7 @@ if(peekType_${recursionDepth}.has_value()){
}
#if($recursionDepth > 1)
#set($parentDepth = $recursionDepth - 1)
- nestedList_${parentDepth}.push_back(${value});
+ nestedList_${parentDepth}.push_back(nestedMap_${recursionDepth});
#else
${memberVarName}.push_back(nestedMap_${recursionDepth});
#end
@@ -202,13 +271,25 @@ if(peekType_${recursionDepth}.has_value()){
if(peekType_${recursionDepth}.value() == Aws::Crt::Cbor::CborType::UInt){
auto ${containerVar} = decoder->PopNextUnsignedIntVal();
if (${containerVar}.has_value()) {
- ${value}.push_back(static_cast(${containerVar}.value()));
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(static_cast(${containerVar}.value()));
+#else
+ nestedList_${parentListDepth}.push_back(static_cast(${containerVar}.value()));
+#end
}
} else {
auto ${containerVar} = decoder->PopNextNegativeIntVal();
if (${containerVar}.has_value()) {
- ${value}.push_back(static_cast(1 - ${containerVar}.value()));
+#if($parentListDepth == 0)
+ ${memberVarName}.push_back(static_cast(1 - ${containerVar}.value()));
+#else
+ nestedList_${parentListDepth}.push_back(static_cast(1 - ${containerVar}.value()));
+#end
}
}
}
-#end
\ No newline at end of file
+#end
+#if($member.shape.sparse)
+ } // end else (non-null sparse element)
+}
+#end
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborDecodeMapValue.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborDecodeMapValue.vm
index 29bd1683e133..05688770430f 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborDecodeMapValue.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborDecodeMapValue.vm
@@ -1,10 +1,27 @@
+#set($parentMapDepth = $recursionDepth - 1)
auto key_${recursionDepth} = decoder->PopNextTextVal();
if (key_${recursionDepth}.has_value()) {
Aws::String keyStr_${recursionDepth} = Aws::String(reinterpret_cast(key_${recursionDepth}.value().ptr), key_${recursionDepth}.value().len);
+#if($member.shape.sparse)
+ {
+ auto nullPeek_${recursionDepth} = decoder->PeekType();
+ if (nullPeek_${recursionDepth}.has_value() && nullPeek_${recursionDepth}.value() == Aws::Crt::Cbor::CborType::Null) {
+ decoder->ConsumeNextSingleElement();
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}];
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}];
+#end
+ } else {
+#end
#if($shapeMember.enum)
auto ${containerVar} = decoder->PopNextTextVal();
if (${containerVar}.has_value()) {
- ${value}[keyStr_${recursionDepth}] = ${shapeMember.name}Mapper::Get${shapeMember.name}ForName(Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len));
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = ${shapeMember.name}Mapper::Get${shapeMember.name}ForName(Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len));
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = ${shapeMember.name}Mapper::Get${shapeMember.name}ForName(Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len));
+#end
}
#elseif($shapeMember.string)
auto peekType_${recursionDepth} = decoder->PeekType();
@@ -12,7 +29,11 @@ if(peekType_${recursionDepth}){
if (peekType_${recursionDepth}.value() == Aws::Crt::Cbor::CborType::Text) {
auto ${containerVar} = decoder->PopNextTextVal();
if (${containerVar}.has_value()) {
- ${value}[keyStr_${recursionDepth}] = Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len);
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len);
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len);
+#end
}
} else {
decoder->ConsumeNextSingleElement();
@@ -30,24 +51,40 @@ if(peekType_${recursionDepth}){
ss_${recursionDepth} << Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len);
}
}
- ${value}[keyStr_${recursionDepth}] = ss_${recursionDepth}.str();
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = ss_${recursionDepth}.str();
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = ss_${recursionDepth}.str();
+#end
ss_${recursionDepth}.clear();
}
}
#elseif($shapeMember.boolean)
auto ${containerVar} = decoder->PopNextBooleanVal();
if (${containerVar}.has_value()) {
- ${value}[keyStr_${recursionDepth}] = ${containerVar}.value();
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = ${containerVar}.value();
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = ${containerVar}.value();
+#end
}
#elseif($shapeMember.double)
auto ${containerVar} = decoder->PopNextFloatVal();
if (${containerVar}.has_value()) {
- ${value}[keyStr_${recursionDepth}] = ${containerVar}.value();
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = ${containerVar}.value();
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = ${containerVar}.value();
+#end
}
#elseif($shapeMember.float)
auto ${containerVar} = decoder->PopNextFloatVal();
if (${containerVar}.has_value()) {
- ${value}[keyStr_${recursionDepth}] = ${containerVar}.value();
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = ${containerVar}.value();
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = ${containerVar}.value();
+#end
}
#elseif($shapeMember.blob)
auto peekType_${recursionDepth} = decoder->PeekType();
@@ -55,7 +92,11 @@ if(peekType_${recursionDepth}){
if (peekType_${recursionDepth}.value() == Aws::Crt::Cbor::CborType::Bytes) {
auto ${containerVar} = decoder->PopNextBytesVal();
if (${containerVar}.has_value()) {
- ${value}[keyStr_${recursionDepth}] = Aws::Utils::ByteBuffer(${containerVar}.value().ptr, ${containerVar}.value().len);
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = Aws::Utils::ByteBuffer(${containerVar}.value().ptr, ${containerVar}.value().len);
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = Aws::Utils::ByteBuffer(${containerVar}.value().ptr, ${containerVar}.value().len);
+#end
}
} else {
decoder->ConsumeNextSingleElement();
@@ -73,7 +114,11 @@ if(peekType_${recursionDepth}){
ss_${recursionDepth} << Aws::String(reinterpret_cast(${containerVar}.value().ptr), ${containerVar}.value().len);
}
}
- ${value}[keyStr_${recursionDepth}] = Aws::Utils::ByteBuffer(ss_${recursionDepth}.str());
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = Aws::Utils::ByteBuffer(ss_${recursionDepth}.str());
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = Aws::Utils::ByteBuffer(ss_${recursionDepth}.str());
+#end
ss_${recursionDepth}.clear();
}
}
@@ -88,27 +133,47 @@ if(peekType_${recursionDepth}){
{
auto ${containerVar} = decoder->PopNextFloatVal();
if (${containerVar}.has_value()) {
- ${value}[keyStr_${recursionDepth}] = Aws::Utils::DateTime(${containerVar}.value());
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = Aws::Utils::DateTime(${containerVar}.value());
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = Aws::Utils::DateTime(${containerVar}.value());
+#end
}
}
else
{
auto ${containerVar} = decoder->PopNextUnsignedIntVal();
if (${containerVar}.has_value()) {
- ${value}[keyStr_${recursionDepth}] = Aws::Utils::DateTime(${containerVar}.value());
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = Aws::Utils::DateTime(${containerVar}.value());
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = Aws::Utils::DateTime(${containerVar}.value());
+#end
}
}
}
}
#elseif($shapeMember.structure)
#if($member.shape.isMutuallyReferencedWith($shape) || $member.shape.getName() == $shape.getName())
- ${value}[keyStr_${recursionDepth}] = Aws::MakeShared<${shapeMember.name}>("${typeInfo.className}", ${shapeMember.name}(decoder));
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = Aws::MakeShared<${shapeMember.name}>("${typeInfo.className}", ${shapeMember.name}(decoder));
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = Aws::MakeShared<${shapeMember.name}>("${typeInfo.className}", ${shapeMember.name}(decoder));
+#end
#else
- ${value}[keyStr_${recursionDepth}] = ${shapeMember.name}(decoder);
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = ${shapeMember.name}(decoder);
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = ${shapeMember.name}(decoder);
+#end
#end
#elseif($shapeMember.map)
#set($template.nestedShapeMember = $shapeMember.mapValue.shape)
+#if($shapeMember.sparse)
+ auto nestedMap_${recursionDepth} = Map>();
+#else
auto nestedMap_${recursionDepth} = Map();
+#end
auto peekType_${recursionDepth} = decoder->PeekType();
if (peekType_${recursionDepth}.has_value() && (peekType_${recursionDepth}.value() == CborType::MapStart || peekType_${recursionDepth}.value() == CborType::IndefMapStart))
{
@@ -144,16 +209,20 @@ if(peekType_${recursionDepth}){
#set($recursionDepth = $recursionDepth - 1)
}
}
- #if($recursionDepth > 0)
+ #if($recursionDepth > 1)
#set($parentDepth = $recursionDepth - 1)
- nestedMap_${parentDepth}[keyStr_${recursionDepth}] = ${value};
+ nestedMap_${parentDepth}[keyStr_${recursionDepth}] = nestedMap_${recursionDepth};
#else
${memberVarName}[keyStr_${recursionDepth}] = nestedMap_${recursionDepth};
#end
}
#elseif($shapeMember.list)
#set($template.nestedShapeMember = $shapeMember.listMember.shape)
+#if($shapeMember.sparse)
+ auto nestedList_${recursionDepth} = Vector>();
+#else
auto nestedList_${recursionDepth} = Vector<$CppViewHelper.computeCppType($template.nestedShapeMember)>();
+#end
auto peekType_${recursionDepth} = decoder->PeekType();
if (peekType_${recursionDepth}.has_value() && (peekType_${recursionDepth}.value() == CborType::ArrayStart || peekType_${recursionDepth}.value() == CborType::IndefArrayStart))
{
@@ -193,7 +262,7 @@ if(peekType_${recursionDepth}){
}
#if($recursionDepth > 1)
#set($parentDepth = $recursionDepth - 1)
- nestedMap_${parentDepth}[keyStr_${recursionDepth}] = ${value};
+ nestedMap_${parentDepth}[keyStr_${recursionDepth}] = nestedList_${recursionDepth};
#else
${memberVarName}[keyStr_${recursionDepth}] = nestedList_${recursionDepth};
#end
@@ -204,14 +273,26 @@ if(peekType_${recursionDepth}){
if(peekType_${recursionDepth}.value() == Aws::Crt::Cbor::CborType::UInt){
auto ${containerVar} = decoder->PopNextUnsignedIntVal();
if (${containerVar}.has_value()) {
- ${value}[keyStr_${recursionDepth}] = static_cast(${containerVar}.value());
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = static_cast(${containerVar}.value());
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = static_cast(${containerVar}.value());
+#end
}
} else {
auto ${containerVar} = decoder->PopNextNegativeIntVal();
if (${containerVar}.has_value()) {
- ${value}[keyStr_${recursionDepth}] = static_cast(1 - ${containerVar}.value());
+#if($parentMapDepth == 0)
+ ${memberVarName}[keyStr_${recursionDepth}] = static_cast(1 - ${containerVar}.value());
+#else
+ nestedMap_${parentMapDepth}[keyStr_${recursionDepth}] = static_cast(1 - ${containerVar}.value());
+#end
}
}
}
#end
-}
\ No newline at end of file
+#if($member.shape.sparse)
+ } // end else (non-null sparse value)
+ }
+#end
+}
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborEncodeValue.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborEncodeValue.vm
index 279d4d3dc78f..fd089e19d3d1 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborEncodeValue.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborEncodeValue.vm
@@ -3,21 +3,43 @@ encoder.WriteText(Aws::Crt::ByteCursorFromCString(${shapeMember.name}Mapper::Get
#elseif($shapeMember.list)
encoder.WriteArrayStart(${value}.size());
for(const auto& item_${recursionDepth} : ${value}) {
+#if($shapeMember.sparse)
+ if (!item_${recursionDepth}.has_value()) { encoder.WriteNull(); } else {
+ const auto& sparseItem_${recursionDepth} = *item_${recursionDepth};
+#set($value = "sparseItem_${recursionDepth}")
#set($shapeMember = $shapeMember.listMember.shape)
+#set($recursionDepth = $recursionDepth + 1)
+#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborEncodeValue.vm")
+#set($recursionDepth = $recursionDepth - 1)
+ }
+#else
#set($value = "item_${recursionDepth}")
+#set($shapeMember = $shapeMember.listMember.shape)
#set($recursionDepth = $recursionDepth + 1)
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborEncodeValue.vm")
#set($recursionDepth = $recursionDepth - 1)
+#end
}
#elseif($shapeMember.map)
encoder.WriteMapStart(${value}.size());
for(const auto& item_${recursionDepth} : ${value}) {
encoder.WriteText(Aws::Crt::ByteCursorFromCString(item_${recursionDepth}.first.c_str()));
+#if($shapeMember.sparse)
+ if (!item_${recursionDepth}.second.has_value()) { encoder.WriteNull(); } else {
+ const auto& sparseVal_${recursionDepth} = *item_${recursionDepth}.second;
+#set($value = "sparseVal_${recursionDepth}")
#set($shapeMember = $shapeMember.mapValue.shape)
+#set($recursionDepth = $recursionDepth + 1)
+#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborEncodeValue.vm")
+#set($recursionDepth = $recursionDepth - 1)
+ }
+#else
#set($value = "item_${recursionDepth}.second")
+#set($shapeMember = $shapeMember.mapValue.shape)
#set($recursionDepth = $recursionDepth + 1)
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborEncodeValue.vm")
#set($recursionDepth = $recursionDepth - 1)
+#end
}
#elseif($shapeMember.blob)
encoder.WriteBytes(Aws::Crt::ByteCursorFromCString(reinterpret_cast(${value}.GetUnderlyingData())));
@@ -40,4 +62,4 @@ encoder.WriteTag(1); //1 represents Epoch-based date/time. See https://www.rfc-e
encoder.WriteUInt(${value}.Seconds());
#else
(${value} >= 0) ? encoder.WriteUInt(${value}) : encoder.WriteNegInt(${value});
-#end
\ No newline at end of file
+#end
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborResultHeader.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborResultHeader.vm
index b3f867df5a35..13f69a08bd73 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborResultHeader.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborResultHeader.vm
@@ -46,6 +46,7 @@ template
${exportMacro} ${classNameRef} operator=(const Aws::AmazonWebServiceResult<${CborRef}>& result);
#set($useRequiredField = false)
+ #set($protocol = "smithy-rpc-v2-cbor")
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/ModelClassMembersAndInlines.vm")
};
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborSubObjectHeader.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborSubObjectHeader.vm
index 096ccba4def8..0a533ddc04a4 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborSubObjectHeader.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/cbor/CborSubObjectHeader.vm
@@ -51,6 +51,7 @@ ${exportMacro} ${classNameRef} operator=(const ${typeInfo.cborDecoder}& decoder)
${exportMacro} void CborEncode(Aws::Crt::Cbor::CborEncoder& encoder) const;
#set($useRequiredField = true)
+#set($protocol = "smithy-rpc-v2-cbor")
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/ModelClassMembersAndInlines.vm")
};
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/common/model/ServiceClientModelHeaderMemberDeclaration.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/common/model/ServiceClientModelHeaderMemberDeclaration.vm
index 3c8d8684cb41..1fd29e072f86 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/common/model/ServiceClientModelHeaderMemberDeclaration.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/common/model/ServiceClientModelHeaderMemberDeclaration.vm
@@ -7,7 +7,11 @@
#else
#set($isEventStreamInput = false)
#end
+#if($protocol == "smithy-rpc-v2-cbor")
+#set($cppType = $CppViewHelper.computeCborCppType($shape, $member.key))
+#else
#set($cppType = $CppViewHelper.computeCppType($shape, $member.key))
+#end
#if($member.value.shape.isException() && !$member.value.shape.isModeledException())
#set($cppType = "${metadata.classNamePrefix}Error")
#end
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/json/ModelInternalMapOrListJsonDeserializer.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/json/ModelInternalMapOrListJsonDeserializer.vm
index 492de94d73bc..9ca68def9179 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/json/ModelInternalMapOrListJsonDeserializer.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/json/ModelInternalMapOrListJsonDeserializer.vm
@@ -18,10 +18,21 @@
#end
#if($template.recursionDepth > 1)
#set($template.containerVar = ${template.lowerCaseVarName} + "Map")
+#if($template.currentShape.sparse)
+ ${template.currentSpaces}Aws::Map<${CppViewHelper.computeCppType($template.currentShape.mapKey.shape)}, Aws::Crt::Optional<${CppViewHelper.computeCppType($template.currentShape.mapValue.shape)}>> ${template.lowerCaseVarName}Map;
+#else
${template.currentSpaces}Aws::Map<${CppViewHelper.computeCppType($template.currentShape.mapKey.shape)}, ${CppViewHelper.computeCppType($template.currentShape.mapValue.shape)}> ${template.lowerCaseVarName}Map;
+#end
#end
${template.currentSpaces}for(auto& ${template.lowerCaseVarName}Item : ${template.lowerCaseVarName}JsonMap)
${template.currentSpaces}{
+#if($template.currentShape.sparse)
+ ${template.currentSpaces} if(${template.lowerCaseVarName}Item.second.IsNull())
+ ${template.currentSpaces} {
+ ${template.currentSpaces} ${template.containerVar}[${template.lowerCaseVarName}Item.first];
+ ${template.currentSpaces} continue;
+ ${template.currentSpaces} }
+#end
#if(!$template.currentShape.mapValue.shape.map && !$template.currentShape.mapValue.shape.list)
#set($lvalue = "${template.containerVar}[${template.lowerCaseVarName}Item.first]")
#set($rvalue = "${template.lowerCaseVarName}Item.second.As${CppViewHelper.computeJsonCppType($template.currentShape.mapValue.shape)}()")
@@ -77,23 +88,50 @@
#end
#if($template.recursionDepth > 1)
#set($template.containerVar = ${template.lowerCaseVarName} + "List")
+#if($template.currentShape.sparse)
+ ${template.currentSpaces}Aws::Vector> ${template.lowerCaseVarName}List;
+#else
${template.currentSpaces}Aws::Vector<${CppViewHelper.computeCppType($template.currentShape.listMember.shape)}> ${template.lowerCaseVarName}List;
+#end
${template.currentSpaces}${template.lowerCaseVarName}List.reserve((size_t)${template.lowerCaseVarName}JsonList.GetLength());
#end
${template.currentSpaces}for(unsigned ${template.lowerCaseVarName}Index = 0; ${template.lowerCaseVarName}Index < ${template.lowerCaseVarName}JsonList.GetLength(); ++${template.lowerCaseVarName}Index)
${template.currentSpaces}{
+#if($template.currentShape.sparse)
+ ${template.currentSpaces} if(${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].IsNull())
+ ${template.currentSpaces} {
+ ${template.currentSpaces} ${template.containerVar}.emplace_back();
+ ${template.currentSpaces} continue;
+ ${template.currentSpaces} }
+#end
#if(!$template.currentShape.listMember.shape.map && !$template.currentShape.listMember.shape.list)
#set($template.atBottom = true)
#if($template.currentShape.listMember.shape.enum)
#set($enumName = $template.currentShape.listMember.shape.name)
+#if($template.currentShape.sparse)
+ ${template.currentSpaces} ${template.containerVar}.emplace_back(${enumName}Mapper::Get${enumName}ForName(${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].AsString()));
+#else
${template.currentSpaces} ${template.containerVar}.push_back(${enumName}Mapper::Get${enumName}ForName(${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].AsString()));
+#end
#elseif($template.currentShape.listMember.shape.blob)
+#if($template.currentShape.sparse)
+ ${template.currentSpaces} ${template.containerVar}.emplace_back(HashingUtils::Base64Decode(${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].As${CppViewHelper.computeJsonCppType($template.currentShape.listMember.shape)}()));
+#else
${template.currentSpaces} ${template.containerVar}.push_back(HashingUtils::Base64Decode(${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].As${CppViewHelper.computeJsonCppType($template.currentShape.listMember.shape)}()));
+#end
#elseif($template.currentShape.listMember.shape.timeStamp && $template.currentShape.listMember.shape.timestampFormat == "iso8601")
+#if($template.currentShape.sparse)
+ ${template.currentSpaces} ${template.containerVar}.emplace_back(Aws::Utils::DateTime{${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].As${CppViewHelper.computeJsonCppType($template.currentShape.listMember.shape)}(), Aws::Utils::DateFormat::$CppViewHelper.computeTimestampFormatInQueryString($template.currentShape.listMember.shape)});
+#else
${template.currentSpaces} ${template.containerVar}.push_back(Aws::Utils::DateTime{${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].As${CppViewHelper.computeJsonCppType($template.currentShape.listMember.shape)}(), Aws::Utils::DateFormat::$CppViewHelper.computeTimestampFormatInQueryString($template.currentShape.listMember.shape)});
+#end
+#else
+#if($template.currentShape.sparse)
+ ${template.currentSpaces} ${template.containerVar}.emplace_back(${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].As${CppViewHelper.computeJsonCppType($template.currentShape.listMember.shape)}());
#else
${template.currentSpaces} ${template.containerVar}.push_back(${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].As${CppViewHelper.computeJsonCppType($template.currentShape.listMember.shape)}());
#end
+#end
#else
#set($currentSpaces = $template.currentSpaces + " ")
#set($currentShape = $template.currentShape.listMember.shape)
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/json/ModelInternalMapOrListJsonize.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/json/ModelInternalMapOrListJsonize.vm
index 56c69280c330..b6bdd69ff86f 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/json/ModelInternalMapOrListJsonize.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/json/ModelInternalMapOrListJsonize.vm
@@ -13,8 +13,35 @@
${template.currentSpaces}JsonValue ${template.lowerCaseVarName}JsonMap;
${template.currentSpaces}for(auto& ${template.lowerCaseVarName}Item : ${template.containerVar})
${template.currentSpaces}{
+#if($template.currentShape.sparse)
+ ${template.currentSpaces} if(!${template.lowerCaseVarName}Item.second.has_value())
+ ${template.currentSpaces} {
+ ${template.currentSpaces} ${template.lowerCaseVarName}JsonMap.WithNull(${template.lowerCaseVarName}Item.first);
+ ${template.currentSpaces} continue;
+ ${template.currentSpaces} }
+#end
#if(!$template.currentShape.mapValue.shape.map && !$template.currentShape.mapValue.shape.list)
#set($functionCall = "${template.lowerCaseVarName}JsonMap.With${CppViewHelper.computeJsonCppType($template.currentShape.mapValue.shape)}")
+#if($template.currentShape.sparse)
+#set($key = "${template.lowerCaseVarName}Item.first")
+#if($template.currentShape.mapValue.shape.isStructure() || $template.currentShape.mapValue.shape.isTimeStamp() || $template.currentShape.mapValue.shape.isDocument())
+#set($value = "${template.lowerCaseVarName}Item.second${CppViewHelper.computeJsonizeString($template.currentShape.mapValue.shape, true)}")
+#else
+#set($value = "*${template.lowerCaseVarName}Item.second")
+#end
+#if($template.currentShape.mapValue.shape.isBlob())
+#set($value = "HashingUtils::Base64Encode(*${template.lowerCaseVarName}Item.second${CppViewHelper.computeJsonizeString($template.currentShape.mapValue.shape)})")
+#end
+#if($template.currentShape.mapKey.shape.enum)
+#set($enumName = $template.currentShape.mapKey.shape.name)
+#set($key = "${enumName}Mapper::GetNameFor${enumName}(${template.lowerCaseVarName}Item.first)")
+#end
+#if($template.currentShape.mapValue.shape.enum)
+#set($enumName = $template.currentShape.mapValue.shape.name)
+#set($value = "${enumName}Mapper::GetNameFor${enumName}(*${template.lowerCaseVarName}Item.second)")
+#set($functionCall = "${template.lowerCaseVarName}JsonMap.WithString")
+#end
+#else
#set($key = "${template.lowerCaseVarName}Item.first")
#set($value = "${template.lowerCaseVarName}Item.second${CppViewHelper.computeJsonizeString($template.currentShape.mapValue.shape)}")
#if($template.currentShape.mapValue.shape.isBlob())
@@ -28,6 +55,7 @@
#set($enumName = $template.currentShape.mapValue.shape.name)
#set($value = "${enumName}Mapper::GetNameFor${enumName}(${value})")
#set($functionCall = "${template.lowerCaseVarName}JsonMap.WithString")
+#end
#end
${template.currentSpaces} ${functionCall}(${key}, ${value});
#set($template.atBottom = true)
@@ -35,7 +63,11 @@
#set($currentSpaces = $template.currentSpaces + " ")
#set($currentShape = $template.currentShape.mapValue.shape)
#set($memberKey = $template.currentShape.mapValue.shape.name)
+#if($template.currentShape.sparse)
+#set($containerVar = "(*" + ${template.lowerCaseVarName} + "Item.second)")
+#else
#set($containerVar = ${template.lowerCaseVarName} + "Item.second")
+#end
#set($recursionDepth = $template.recursionDepth + 1)
#set($jsonValue = ${template.lowerCaseVarName} + "Item.second")
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/json/ModelInternalMapOrListJsonize.vm")
@@ -59,22 +91,49 @@
${template.currentSpaces}${AwsArray} ${template.lowerCaseVarName}JsonList(${template.containerVar}.size());
${template.currentSpaces}for(unsigned ${template.lowerCaseVarName}Index = 0; ${template.lowerCaseVarName}Index < ${template.lowerCaseVarName}JsonList.GetLength(); ++${template.lowerCaseVarName}Index)
${template.currentSpaces}{
+#if($template.currentShape.sparse)
+ ${template.currentSpaces} if(!${template.containerVar}[${template.lowerCaseVarName}Index].has_value())
+ ${template.currentSpaces} {
+ ${template.currentSpaces} ${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].AsNull();
+ ${template.currentSpaces} continue;
+ ${template.currentSpaces} }
+#end
#if(!$template.currentShape.listMember.shape.map && !$template.currentShape.listMember.shape.list)
#set($template.atBottom = true)
#if($template.currentShape.listMember.shape.enum)
#set($enumName = $template.currentShape.listMember.shape.name)
+#if($template.currentShape.sparse)
+ ${template.currentSpaces} ${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].AsString(${enumName}Mapper::GetNameFor${enumName}(*${template.containerVar}[${template.lowerCaseVarName}Index]));
+#else
${template.currentSpaces} ${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].AsString(${enumName}Mapper::GetNameFor${enumName}(${template.containerVar}[${template.lowerCaseVarName}Index]));
+#end
#elseif($template.currentShape.listMember.shape.blob)
+#if($template.currentShape.sparse)
+ ${template.currentSpaces} ${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].As${CppViewHelper.computeJsonCppType($template.currentShape.listMember.shape)}(HashingUtils::Base64Encode(*${template.containerVar}[${template.lowerCaseVarName}Index]${CppViewHelper.computeJsonizeString($template.currentShape.listMember.shape)}));
+#else
${template.currentSpaces} ${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].As${CppViewHelper.computeJsonCppType($template.currentShape.listMember.shape)}(HashingUtils::Base64Encode(${template.containerVar}[${template.lowerCaseVarName}Index]${CppViewHelper.computeJsonizeString($template.currentShape.listMember.shape)}));
+#end
+#else
+#if($template.currentShape.sparse)
+#if($template.currentShape.listMember.shape.isStructure() || $template.currentShape.listMember.shape.isTimeStamp() || $template.currentShape.listMember.shape.isDocument())
+ ${template.currentSpaces} ${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].As${CppViewHelper.computeJsonCppType($template.currentShape.listMember.shape)}(${template.containerVar}[${template.lowerCaseVarName}Index]${CppViewHelper.computeJsonizeString($template.currentShape.listMember.shape, true)});
+#else
+ ${template.currentSpaces} ${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].As${CppViewHelper.computeJsonCppType($template.currentShape.listMember.shape)}(*${template.containerVar}[${template.lowerCaseVarName}Index]);
+#end
#else
${template.currentSpaces} ${template.lowerCaseVarName}JsonList[${template.lowerCaseVarName}Index].As${CppViewHelper.computeJsonCppType($template.currentShape.listMember.shape)}(${template.containerVar}[${template.lowerCaseVarName}Index]${CppViewHelper.computeJsonizeString($template.currentShape.listMember.shape)});
#end
+#end
#else
#set($currentSpaces = $template.currentSpaces + " ")
#set($currentShape = $template.currentShape.listMember.shape)
#set($memberKey = $template.currentShape.listMember.shape.name)
#set($jsonValue = ${template.lowerCaseVarName} + "JsonList[" + ${template.lowerCaseVarName} + "Index]")
+#if($template.currentShape.sparse)
+#set($containerVar = "(*" + $template.containerVar + "[" + ${template.lowerCaseVarName} + "Index])")
+#else
#set($containerVar = $template.containerVar + "[" + ${template.lowerCaseVarName} + "Index]")
+#end
#set($recursionDepth = $template.recursionDepth + 1)
#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/json/ModelInternalMapOrListJsonize.vm")
#end
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/request/SetListMacro.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/request/SetListMacro.vm
index 98ee03ac1321..8b612eb14933 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/request/SetListMacro.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/request/SetListMacro.vm
@@ -31,6 +31,18 @@ ${macro.spaces}{
${macro.spaces}}
#end##foreach
#else## not (list || map || structure)
+#if($listShape.sparse)
+#set($macro.fieldAdder = "Add${CppViewHelper.capitalizeFirstChar($testInputParam.key)}")
+#foreach($arrayItem in $testInputParam.value)
+#if($arrayItem == "null")
+${macro.spaces}${dstObject}.${macro.fieldAdder}(Aws::Crt::Optional<$CppViewHelper.computeCppType($macro.listMemberShape)>{});
+#elseif($macro.listMemberShape.list || $macro.listMemberShape.map)
+${macro.spaces}${dstObject}.${macro.fieldAdder}($CppViewHelper.computeCppType($macro.listMemberShape)#SerializeSingleParameterMacro($macro.listMemberShape, $arrayItem));
+#else
+${macro.spaces}${dstObject}.${macro.fieldAdder}(#SerializeSingleParameterMacro($macro.listMemberShape, $arrayItem));
+#end
+#end
+#else
#set($macro.fieldSetter = "Set${CppViewHelper.capitalizeFirstChar($testInputParam.key)}")
#set($macro.listResult="{")
#foreach($arrayItem in $testInputParam.value)
@@ -39,5 +51,6 @@ ${macro.spaces}}
#end
#set($macro.listResult=$macro.listResult + "}")
${spaces}${dstObject}.${macro.fieldSetter}($macro.listResult);
+#end
#end##(list || map || structure)
#end##macro SetListMacro
\ No newline at end of file
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/request/SetMapMacro.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/request/SetMapMacro.vm
index 809e27ce2377..63e49e95b108 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/request/SetMapMacro.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/request/SetMapMacro.vm
@@ -7,17 +7,24 @@
#set($macro.mapItemVarName = "${dstObject}${CppViewHelper.capitalizeFirstChar(${CppViewHelper.computeVariableName($testInputParam.key)})}Item")
#set($macro.fieldAdder = "Add${CppViewHelper.capitalizeFirstChar($testInputParam.key)}")
#foreach($mapItem in $testInputParam.value.fields())
+#if($mapShape.sparse && $mapItem.value == "null")
+${macro.spaces}${dstObject}.${macro.fieldAdder}("$mapItem.key", Aws::Crt::Optional{});
+#else
${macro.spaces}{
${macro.spaces}Aws::Utils::Document ${macro.mapItemVarName}(R"j(${mapItem.value})j");
${macro.spaces}${dstObject}.${macro.fieldAdder}("$mapItem.key", $macro.mapItemVarName);
${macro.spaces}}
#end
+#end
#break
#end
#if($mapShape.mapValue.shape.structure)
#set($macro.mapItemVarName = "${dstObject}${CppViewHelper.capitalizeFirstChar(${CppViewHelper.computeVariableName($testInputParam.key)})}Item")
#set($macro.fieldAdder = "Add${CppViewHelper.capitalizeFirstChar($testInputParam.key)}")
#foreach($mapItem in $testInputParam.value.fields())
+#if($mapShape.sparse && $mapItem.value == "null")
+${macro.spaces}${dstObject}.${macro.fieldAdder}("$mapItem.key", Aws::Crt::Optional<$CppViewHelper.computeCppType($mapShape.mapValue.shape)>{});
+#else
${macro.spaces}{
${macro.spaces}$CppViewHelper.computeCppType($mapShape.mapValue.shape) $macro.mapItemVarName;
#foreach($innerParam in $mapItem.value.fields())
@@ -26,9 +33,22 @@ ${macro.spaces}{
${macro.spaces}${dstObject}.${macro.fieldAdder}("$mapItem.key", $macro.mapItemVarName);
${macro.spaces}}
#end
+#end
#break
#end
###----- the map value is not nested structure or document
+#if($mapShape.sparse)
+#set($macro.fieldAdder = "Add${CppViewHelper.capitalizeFirstChar($testInputParam.key)}")
+#foreach($mapItem in $testInputParam.value.fields())
+#if($mapItem.value == "null")
+${macro.spaces}${dstObject}.${macro.fieldAdder}("$mapItem.key", Aws::Crt::Optional<$CppViewHelper.computeCppType($mapShape.mapValue.shape)>{});
+#elseif($mapShape.mapValue.shape.list || $mapShape.mapValue.shape.map)
+${macro.spaces}${dstObject}.${macro.fieldAdder}("$mapItem.key", $CppViewHelper.computeCppType($mapShape.mapValue.shape)#SerializeSingleParameterMacro($mapShape.mapValue.shape, $mapItem.value));
+#else
+${macro.spaces}${dstObject}.${macro.fieldAdder}("$mapItem.key", #SerializeSingleParameterMacro($mapShape.mapValue.shape, $mapItem.value));
+#end
+#end
+#else
#set($macro.mapResult="{")
#foreach($mapItem in $testInputParam.value.fields())
#set($macro.mapItem="{" + '"' + "$mapItem.key" + '"' + ", ")
@@ -38,4 +58,5 @@ ${macro.spaces}}
#end
#set($macro.mapResult=$macro.mapResult + "}")
${spaces}${dstObject}.${macro.fieldSetter}($macro.mapResult);
+#end
#end##macro SetMapMacro
\ No newline at end of file
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateListMacro.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateListMacro.vm
index 7c9070a317bd..7c9266760a49 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateListMacro.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateListMacro.vm
@@ -23,17 +23,34 @@
#set($macro.listItemVarName = "${dstObject}${CppViewHelper.capitalizeFirstChar(${CppViewHelper.computeVariableName($testValidateParam.key)})}Item")
#end
#if($macro.listMemberShape.list || $macro.listMemberShape.map || $macro.listMemberShape.structure)
+#if($listShape.sparse && $macro.listMemberShape.structure)
+${macro.spaces}const Aws::Vector>& $macro.listItemVarName = ${dstObject}.${macro.fieldGetter};
+${macro.spaces}EXPECT_EQ(${testValidateParamVal.size()}U, ${macro.listItemVarName}.size());
+#foreach($arrayItem in $testValidateParamVal)
+${macro.spaces}{
+#if($arrayItem.isNull())
+ ${macro.spaces}EXPECT_FALSE(${macro.listItemVarName}.at(${foreach.index}).has_value());
+#else
+ ${macro.spaces}EXPECT_TRUE(${macro.listItemVarName}.at(${foreach.index}).has_value());
+ ${macro.spaces}const ${macro.listMemberShape.name}& ${macro.listItemVarName}Ref = *${macro.listItemVarName}.at(${foreach.index});
+#foreach($innerParam in $arrayItem.fields())
+#ValidateParamsMacro("${macro.spaces} " "${macro.listItemVarName}Ref" $macro.listMemberShape $innerParam)
+#end
+#end
+${macro.spaces}}
+#end
+#else
${macro.spaces}EXPECT_EQ(${testValidateParamVal.size()}U, ${dstObject}.${macro.fieldGetter}.size());
#foreach($arrayItem in $testValidateParamVal)
${macro.spaces}{
#if($macro.listMemberShape.list)
- ${macro.spaces}const Aws::Vector<$CppViewHelper.computeCppType($macro.listMemberShape.listMember.shape)>& $macro.listItemVarName = ${dstObject}.${macro.fieldGetter}.at(${foreach.index});
+ ${macro.spaces}const Aws::Vector<$CppViewHelper.computeResultCppType($macro.listMemberShape.listMember.shape, $serviceModel.metadata.protocol)>& $macro.listItemVarName = ${dstObject}.${macro.fieldGetter}.at(${foreach.index});
${macro.spaces}EXPECT_EQ(${arrayItem.size()}U, ${macro.listItemVarName}.size());
#foreach($innerListEl in $arrayItem)
${macro.spaces}EXPECT_EQ(#ValidateSingleParameterMacro($macro.listMemberShape.listMember.shape, $innerListEl), ${macro.listItemVarName}.at(${foreach.index}));
#end
#elseif($macro.listMemberShape.map)
- ${macro.spaces}const Aws::Map<$CppViewHelper.computeCppType($macro.listMemberShape.mapKey.shape), $CppViewHelper.computeCppType($macro.listMemberShape.mapValue.shape)>& $macro.listItemVarName = ${dstObject}.${macro.fieldGetter}.at(${foreach.index});
+ ${macro.spaces}const Aws::Map<$CppViewHelper.computeResultCppType($macro.listMemberShape.mapKey.shape, $serviceModel.metadata.protocol), $CppViewHelper.computeResultCppType($macro.listMemberShape.mapValue.shape, $serviceModel.metadata.protocol)>& $macro.listItemVarName = ${dstObject}.${macro.fieldGetter}.at(${foreach.index});
${macro.spaces}EXPECT_EQ(${arrayItem.size()}U, ${macro.listItemVarName}.size());
#foreach($innerMapEl in $arrayItem.fields())
${macro.spaces}EXPECT_TRUE(${macro.listItemVarName}.find("$innerMapEl.key") != ${macro.listItemVarName}.end());
@@ -47,11 +64,25 @@ ${macro.spaces}{
#end##list
${macro.spaces}}
#end##foreach
+#end
#else## not (list || map || structure)
-${macro.spaces}const Aws::Vector<$CppViewHelper.computeCppType($macro.listMemberShape)>& $macro.listItemVarName = ${dstObject}.${macro.fieldGetter};
+#if($listShape.sparse)
+${macro.spaces}const Aws::Vector>& $macro.listItemVarName = ${dstObject}.${macro.fieldGetter};
+${macro.spaces}EXPECT_EQ(${testValidateParamVal.size()}U, ${macro.listItemVarName}.size());
+#foreach($arrayItem in $testValidateParamVal)
+#if($arrayItem.isNull())
+${macro.spaces}EXPECT_FALSE(${macro.listItemVarName}.at(${foreach.index}).has_value());
+#else
+${macro.spaces}EXPECT_TRUE(${macro.listItemVarName}.at(${foreach.index}).has_value());
+${macro.spaces}EXPECT_EQ(#ValidateSingleParameterMacro($macro.listMemberShape, $arrayItem), *${macro.listItemVarName}.at(${foreach.index}));
+#end
+#end
+#else
+${macro.spaces}const Aws::Vector<$CppViewHelper.computeResultCppType($macro.listMemberShape, $serviceModel.metadata.protocol)>& $macro.listItemVarName = ${dstObject}.${macro.fieldGetter};
${macro.spaces}EXPECT_EQ(${testValidateParamVal.size()}U, ${macro.listItemVarName}.size());
#foreach($arrayItem in $testValidateParamVal)
${macro.spaces}EXPECT_EQ(#ValidateSingleParameterMacro($macro.listMemberShape, $arrayItem), ${macro.listItemVarName}.at(${foreach.index}));
#end
+#end##sparse
#end##(list || map || structure)
#end##macro ValidateListMacro
\ No newline at end of file
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateMapMacro.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateMapMacro.vm
index 845748270b70..d2eb9830fb02 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateMapMacro.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateMapMacro.vm
@@ -17,7 +17,7 @@
#end
#set($macro.spaces = $spaces)
#if($mapShape.mapValue.shape.document)
-${macro.spaces}const Aws::Map<$CppViewHelper.computeCppType($mapShape.mapKey.shape), $CppViewHelper.computeCppType($mapShape.mapValue.shape)>& $macro.mapVarName = ${dstObject}.${macro.fieldGetter};
+${macro.spaces}const Aws::Map<$CppViewHelper.computeResultCppType($mapShape.mapKey.shape, $serviceModel.metadata.protocol), $CppViewHelper.computeResultCppType($mapShape.mapValue.shape, $serviceModel.metadata.protocol)>& $macro.mapVarName = ${dstObject}.${macro.fieldGetter};
${macro.spaces}EXPECT_EQ(${testValidateParamVal.size()}U, ${macro.mapVarName}.size());
#foreach($mapItem in $testValidateParamVal.fields())
${macro.spaces}EXPECT_STREQ(R"j(${mapItem.value})j", ${macro.mapVarName}.at("$mapItem.key").View().WriteCompact().c_str());
@@ -25,21 +25,53 @@ ${macro.spaces}EXPECT_STREQ(R"j(${mapItem.value})j", ${macro.mapVarName}.at("$ma
#break
#end
#if($mapShape.mapValue.shape.structure)
-${macro.spaces}const Aws::Map<$CppViewHelper.computeCppType($mapShape.mapKey.shape), $CppViewHelper.computeCppType($mapShape.mapValue.shape)>& $macro.mapVarName = ${dstObject}.${macro.fieldGetter};
+#if($mapShape.sparse)
+${macro.spaces}const Aws::Map<$CppViewHelper.computeResultCppType($mapShape.mapKey.shape, $serviceModel.metadata.protocol), Aws::Crt::Optional<$CppViewHelper.computeResultCppType($mapShape.mapValue.shape, $serviceModel.metadata.protocol)>>& $macro.mapVarName = ${dstObject}.${macro.fieldGetter};
${macro.spaces}EXPECT_EQ(${testValidateParamVal.size()}U, ${macro.mapVarName}.size());
#foreach($mapItem in $testValidateParamVal.fields())
${macro.spaces}{
${macro.spaces}EXPECT_TRUE(${macro.mapVarName}.find("$mapItem.key") != ${macro.mapVarName}.end());
- ${macro.spaces}const $CppViewHelper.computeCppType($mapShape.mapValue.shape)& $macro.mapItemVarName = ${macro.mapVarName}.at("$mapItem.key");
+#if($mapItem.value.isNull())
+ ${macro.spaces}EXPECT_FALSE(${macro.mapVarName}.at("$mapItem.key").has_value());
+#else
+ ${macro.spaces}EXPECT_TRUE(${macro.mapVarName}.at("$mapItem.key").has_value());
+ ${macro.spaces}const $CppViewHelper.computeResultCppType($mapShape.mapValue.shape, $serviceModel.metadata.protocol)& $macro.mapItemVarName = *${macro.mapVarName}.at("$mapItem.key");
+#foreach($innerParam in $mapItem.value.fields())
+#ValidateParamsMacro("${macro.spaces} " $macro.mapItemVarName $mapShape.mapValue.shape $innerParam)
+#end
+#end
+${macro.spaces}}
+#end
+#else
+${macro.spaces}const Aws::Map<$CppViewHelper.computeResultCppType($mapShape.mapKey.shape, $serviceModel.metadata.protocol), $CppViewHelper.computeResultCppType($mapShape.mapValue.shape, $serviceModel.metadata.protocol)>& $macro.mapVarName = ${dstObject}.${macro.fieldGetter};
+${macro.spaces}EXPECT_EQ(${testValidateParamVal.size()}U, ${macro.mapVarName}.size());
+#foreach($mapItem in $testValidateParamVal.fields())
+${macro.spaces}{
+ ${macro.spaces}EXPECT_TRUE(${macro.mapVarName}.find("$mapItem.key") != ${macro.mapVarName}.end());
+ ${macro.spaces}const $CppViewHelper.computeResultCppType($mapShape.mapValue.shape, $serviceModel.metadata.protocol)& $macro.mapItemVarName = ${macro.mapVarName}.at("$mapItem.key");
#foreach($innerParam in $mapItem.value.fields())
#ValidateParamsMacro("${macro.spaces} " $macro.mapItemVarName $mapShape.mapValue.shape $innerParam)
#end
${macro.spaces}}
#end
+#end
#break
#end
###----- the map value is not nested structure or document
-${macro.spaces}const Aws::Map<$CppViewHelper.computeCppType($mapShape.mapKey.shape), $CppViewHelper.computeCppType($mapShape.mapValue.shape)>& $macro.mapVarName = ${dstObject}.${macro.fieldGetter};
+#if($mapShape.sparse)
+${macro.spaces}const Aws::Map<$CppViewHelper.computeResultCppType($mapShape.mapKey.shape, $serviceModel.metadata.protocol), Aws::Crt::Optional<$CppViewHelper.computeResultCppType($mapShape.mapValue.shape, $serviceModel.metadata.protocol)>>& $macro.mapVarName = ${dstObject}.${macro.fieldGetter};
+${macro.spaces}EXPECT_EQ(${testValidateParamVal.size()}U, ${macro.mapVarName}.size());
+#foreach($mapItem in $testValidateParamVal.fields())
+${macro.spaces}EXPECT_TRUE(${macro.mapVarName}.find("$mapItem.key") != ${macro.mapVarName}.end());
+#if($mapItem.value.isNull())
+${macro.spaces}EXPECT_FALSE(${macro.mapVarName}.at("$mapItem.key").has_value());
+#else
+${macro.spaces}EXPECT_TRUE(${macro.mapVarName}.at("$mapItem.key").has_value());
+${macro.spaces}EXPECT_EQ(#ValidateSingleParameterMacro($mapShape.mapValue.shape, $mapItem.value), *${macro.mapVarName}.at("$mapItem.key"));
+#end
+#end
+#else
+${macro.spaces}const Aws::Map<$CppViewHelper.computeResultCppType($mapShape.mapKey.shape, $serviceModel.metadata.protocol), $CppViewHelper.computeResultCppType($mapShape.mapValue.shape, $serviceModel.metadata.protocol)>& $macro.mapVarName = ${dstObject}.${macro.fieldGetter};
${macro.spaces}EXPECT_EQ(${testValidateParamVal.size()}U, ${macro.mapVarName}.size());
#foreach($mapItem in $testValidateParamVal.fields())
${macro.spaces}EXPECT_TRUE(${macro.mapVarName}.find("$mapItem.key") != ${macro.mapVarName}.end());
@@ -48,4 +80,5 @@ ${macro.spaces}EXPECT_TRUE(${macro.mapVarName}.find("$mapItem.key") != ${macro.m
#set($macro.var = $macro.mapItemVarName)
#ValidateSingleVariableMacro($macro.spaces, $mapShape.mapValue.shape, $mapItem.value, $macro.parentVarName, $macro.getter, $macro.var)
#end
+#end##sparse
#end##macro ValidateMapMacro
\ No newline at end of file
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateParamsMacro.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateParamsMacro.vm
index 96962a369a8d..5263b5ebb285 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateParamsMacro.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateParamsMacro.vm
@@ -24,10 +24,14 @@ ${macro.spaces}EXPECT_TRUE(std::isnan(${dstObject}.${macro.fieldGetter}()));
#elseif($macro.memberToGet.shape.structure)
${macro.spaces}{
#set($macro.innerStructVarName = "${dstObject}${CppViewHelper.capitalizeFirstChar(${CppViewHelper.computeVariableName($testValidateParam.key)})}")
+#if($testValidateParam.value.isNull())
+ ${macro.spaces}(void)${dstObject}.${macro.fieldGetter}();
+#else
${macro.spaces}const ${macro.memberToGet.shape.name}& $macro.innerStructVarName = ${dstObject}.${macro.fieldGetter}();
#foreach($innerParam in $testValidateParam.value.fields())
#ValidateParamsMacro("${macro.spaces} ", $macro.innerStructVarName, $macro.memberToGet.shape, $innerParam)
#end
+#end
${macro.spaces}}
#elseif($testValidateParam.key != "contentType" && $currentShape.members.containsKey($testValidateParam.key) && $CppViewHelper.isStreamingPayloadMember($currentShape, $testValidateParam.key))
#set($macro.payloadVarName = "${dstObject}${CppViewHelper.capitalizeFirstChar(${CppViewHelper.computeVariableName($testValidateParam.key)})}")
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateSingleParameterMacro.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateSingleParameterMacro.vm
index 1e5ee6442cd1..7f3d0c0d6a5f 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateSingleParameterMacro.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/protocoltests/result/ValidateSingleParameterMacro.vm
@@ -38,15 +38,14 @@ Aws::Utils::DateTime(static_cast(${value}))##
#elseif($shape.enum)
${shape.name}Mapper::Get${shape.name}ForName(R"e(${value.asText()})e")##
#elseif($shape.list)
-#set($macro.listResult="Aws::Vector<$CppViewHelper.computeCppType($shape)>({")
-#foreach($listItem in $value)
+#set($macro.listResult="Aws::Vector<$CppViewHelper.computeResultCppType($shape.listMember.shape, $serviceModel.metadata.protocol)>({")#foreach($listItem in $value)
#set($macro.listResult=$macro.listResult + "#ValidateSingleParameterMacro($shape.listMember.shape, $listItem)")
#if($foreach.hasNext)#set($macro.listResult=$macro.listResult + ", ")#end
#end
#set($macro.listResult=$macro.listResult + "})")
$macro.listResult##
#elseif($shape.map)
-#set($macro.mapResult="Aws::Map<$CppViewHelper.computeCppType($shape.mapKey.shape), $CppViewHelper.computeCppType($shape.mapValue.shape)>({")
+#set($macro.mapResult="Aws::Map<$CppViewHelper.computeResultCppType($shape.mapKey.shape, $serviceModel.metadata.protocol), $CppViewHelper.computeResultCppType($shape.mapValue.shape, $serviceModel.metadata.protocol)>({")
#foreach($mapItem in $value.fields())
#set($macro.mapItem="{" + '"' + "$mapItem.key" + '"' + ", ")
#set($macro.mapItem=$macro.mapItem + "#ValidateSingleParameterMacro($shape.mapValue.shape, $mapItem.value)" + "}")
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QuerySerializeTemplateMacros/serializeRequestQueryListElement.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QuerySerializeTemplateMacros/serializeRequestQueryListElement.vm
index 03c8ca9e6bab..f4e686065506 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QuerySerializeTemplateMacros/serializeRequestQueryListElement.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QuerySerializeTemplateMacros/serializeRequestQueryListElement.vm
@@ -45,10 +45,23 @@
#end
#end
#if($member.shape.listMember.shape.structure)
+#if($member.shape.sparse)
+ ${macro.spaces} if(item.has_value()) {
+ ${macro.spaces} item.value().OutputToStream(ss, "${macro.listLocation}.", ${varName}Count, "");
+ ${macro.spaces} }
+#else
${macro.spaces} item.OutputToStream(ss, "${macro.listLocation}.", ${varName}Count, "");
+#end
+#else
+#if($member.shape.sparse)
+ ${macro.spaces} if(item.has_value()) {
+ ${macro.spaces} ss << "${macro.listLocation}." << ${varName}Count << "="
+ ${macro.spaces} << #serializeQuerySingleElementToText($macro.spaces, $member.shape.listMember, "item.value()") << "&";
+ ${macro.spaces} }
#else
${macro.spaces} ss << "${macro.listLocation}." << ${varName}Count << "="
${macro.spaces} << #serializeQuerySingleElementToText($macro.spaces, $member.shape.listMember, "item") << "&";
+#end
#end
${macro.spaces} ${varName}Count++;
${macro.spaces}}
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QuerySerializeTemplateMacros/serializeRequestQueryMapElement.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QuerySerializeTemplateMacros/serializeRequestQueryMapElement.vm
index 751eca7c55ab..f797d4abb67a 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QuerySerializeTemplateMacros/serializeRequestQueryMapElement.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QuerySerializeTemplateMacros/serializeRequestQueryMapElement.vm
@@ -35,14 +35,27 @@
#end
## --- MAP VALUE ---
#if($member.shape.mapValue.shape.structure)
+#if($member.shape.sparse)
+ ${spaces} if(item.second.has_value()) {
+ ${spaces} item.second.value().OutputToStream(ss, "${macro.mapLocationName}.", ${macro.varName}Count, ".${macro.valueLocationName}");
+ ${spaces} }
+#else
${spaces} item.second.OutputToStream(ss, "${macro.mapLocationName}.", ${macro.varName}Count, ".${macro.valueLocationName}");
+#end
#else
#set($macro.equals='=')
#if($member.shape.mapValue.shape.list || $member.shape.mapValue.shape.map)
#set($macro.equals='')
#end
+#if($member.shape.sparse)
+ ${spaces} if(item.second.has_value()) {
+ ${spaces} ss << "${macro.mapLocationName}." << ${macro.varName}Count << ".${macro.valueLocationName}${macro.equals}"
+ ${spaces} << #serializeQuerySingleElementToText($spaces, $member.shape.mapValue, "item.second.value()") << "&";
+ ${spaces} }
+#else
${spaces} ss << "${macro.mapLocationName}." << ${macro.varName}Count << ".${macro.valueLocationName}${macro.equals}"
${spaces} << #serializeQuerySingleElementToText($spaces, $member.shape.mapValue, "item.second") << "&";
+#end
#end
${spaces} ${macro.varName}Count++;
${spaces}}
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QuerySerializeTemplateMacros/serializeSubObjQueryMapElement.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QuerySerializeTemplateMacros/serializeSubObjQueryMapElement.vm
index 633eddb064d3..4db390fc41b7 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QuerySerializeTemplateMacros/serializeSubObjQueryMapElement.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QuerySerializeTemplateMacros/serializeSubObjQueryMapElement.vm
@@ -32,14 +32,26 @@
#if($member.shape.mapValue.shape.structure)
${spaces} Aws::StringStream ${macro.lowerCaseVarName}Ss;
${spaces} ${macro.lowerCaseVarName}Ss << location << ${macro.locationIndexValue}".${macro.mapLocationName}." << ${macro.lowerCaseVarName}Idx << ".${macro.mapValueLocationName}";
+#if($member.shape.sparse)
+ ${spaces} if(item.second.has_value()) {
+ ${spaces} item.second.value().OutputToStream(oStream, ${macro.lowerCaseVarName}Ss.str().c_str());
+ ${spaces} }
+#else
${spaces} item.second.OutputToStream(oStream, ${macro.lowerCaseVarName}Ss.str().c_str());
+#end
#else
#set($macro.equals='="')
#if($member.shape.mapValue.shape.list || $member.shape.mapValue.shape.map)
#set($macro.equals='"')
#end
#set($mapValueLocation = '".' + "${macro.mapLocationName}." + '"' + " << ${macro.lowerCaseVarName}Idx << " + '".' + ${macro.mapValueLocationName} + $macro.equals + $nl + " ${spaces} ")
+#if($member.shape.sparse)
+ ${spaces} if(item.second.has_value()) {
+ ${spaces} oStream << location << ${macro.locationIndexValue}#serializeSubObjQuerySingleElement($member.shape.mapValue, $mapValueLocation, "item.second.value()") << "&";
+ ${spaces} }
+#else
${spaces} oStream << location << ${macro.locationIndexValue}#serializeSubObjQuerySingleElement($member.shape.mapValue, $mapValueLocation, "item.second") << "&";
+#end
#end
${spaces} ${macro.lowerCaseVarName}Idx++;
${spaces}}
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlListPayloadElement.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlListPayloadElement.vm
index 289c96de1220..be8e43a22dbf 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlListPayloadElement.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlListPayloadElement.vm
@@ -54,7 +54,19 @@
${macro.spaces}while(!${macro.listVarName}.IsNull())
${macro.spaces}{
#set($macro.memberVarName = $CppViewHelper.computeMemberVariableName($memberName))
+#if($member.shape.sparse)
+ ${macro.spaces} if(${macro.listVarName}.GetText().empty() || ${macro.listVarName}.GetAttributeValue("xsi:nil") == "true") {
+ ${macro.spaces} ${macro.memberVarName}.emplace_back();
+ ${macro.spaces} } else {
+#if($member.shape.listMember.shape.structure)
+ ${macro.spaces} ${macro.memberVarName}.emplace_back(#deserializeXmlSingleElement($member.shape.listMember, $macro.listVarName));
+#else
+ ${macro.spaces} ${macro.memberVarName}.push_back(#deserializeXmlSingleElement($member.shape.listMember, $macro.listVarName));
+#end
+ ${macro.spaces} }
+#else
${macro.spaces} ${macro.memberVarName}.push_back(#deserializeXmlSingleElement($member.shape.listMember, $macro.listVarName));
+#end
#if($member.shape.listMember.locationName)
#set($listMemberName = $member.shape.listMember.locationName)
#elseif(!($member.shape.flattened || $member.flattened))
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlMapPayloadElement.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlMapPayloadElement.vm
index c117ed91570a..1c3ed3ccc637 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlMapPayloadElement.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlMapPayloadElement.vm
@@ -38,8 +38,14 @@
${macro.spaces} XmlNode valueNode = ${macro.mapVarName}.FirstChild("value");
#end
#set($macro.memberVarName = $CppViewHelper.computeMemberVariableName($memberName))
+#if($member.shape.sparse)
+ ${macro.spaces} if(valueNode.IsNull() || valueNode.GetAttributeValue("xsi:nil") == "true") { ${macro.memberVarName}[#deserializeXmlSingleElement($member.shape.mapKey, "keyNode")]; } else {
+ ${macro.spaces} ${macro.memberVarName}[#deserializeXmlSingleElement($member.shape.mapKey, "keyNode")] =
+ ${macro.spaces} #deserializeXmlSingleElement($member.shape.mapValue, "valueNode", $macro.spaces, false); }
+#else
${macro.spaces} ${macro.memberVarName}[#deserializeXmlSingleElement($member.shape.mapKey, "keyNode")] =
${macro.spaces} #deserializeXmlSingleElement($member.shape.mapValue, "valueNode", $macro.spaces, false);
+#end
#if($member.locationName)
${macro.spaces} ${macro.mapVarName} = ${macro.mapVarName}.NextNode("${member.locationName}");
#else
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlNestedListElement.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlNestedListElement.vm
index f04e717dbbb3..015c9b215b24 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlNestedListElement.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlNestedListElement.vm
@@ -8,7 +8,15 @@
${macro.spaces} if(${memberVarName}.IsNull()) { return ${macro.resultVarName}; }
${macro.spaces} XmlNode ${macro.resultVarName}MemberNode = ${memberVarName}.FirstChild("${CppViewHelper.ifNotNullOrEmpty($member.locationName, 'member')}");
${macro.spaces} while(!${macro.resultVarName}MemberNode.IsNull()) {
+#if($member.shape.sparse)
+ ${macro.spaces} if(${macro.resultVarName}MemberNode.IsNull() || ${macro.resultVarName}MemberNode.GetText().empty()) {
+ ${macro.spaces} ${macro.resultVarName}.push_back(Aws::Crt::Optional<$CppViewHelper.computeCppType($member.shape.listMember.shape)>{});
+ ${macro.spaces} } else {
+ ${macro.spaces} ${macro.resultVarName}.push_back(#deserializeXmlSingleElement($member.shape.listMember, "${macro.resultVarName}MemberNode"));
+ ${macro.spaces} }
+#else
${macro.spaces} ${macro.resultVarName}.push_back(#deserializeXmlSingleElement($member.shape.listMember, "${macro.resultVarName}MemberNode"));
+#end
${macro.spaces} ${macro.resultVarName}MemberNode = ${macro.resultVarName}MemberNode.NextNode("${CppViewHelper.ifNotNullOrEmpty($member.locationName, 'member')}");
${macro.spaces} }
${macro.spaces} return ${macro.resultVarName};
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlNestedMapElement.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlNestedMapElement.vm
index 2eadbc20f8ec..52ee6eeb9c25 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlNestedMapElement.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlDeserializeTemplateMacros/deserializeXmlNestedMapElement.vm
@@ -23,8 +23,17 @@
${macro.spaces} while(!${macro.resultVarName}EntryNode.IsNull()) {
${macro.spaces} XmlNode ${macro.resultVarName}KeyNode = ${macro.resultVarName}EntryNode.FirstChild("${CppViewHelper.ifNotNullOrEmpty($member.shape.mapKey.locationName, 'key')}");
${macro.spaces} XmlNode ${macro.resultVarName}ValNode = ${macro.resultVarName}EntryNode.FirstChild("${CppViewHelper.ifNotNullOrEmpty($member.shape.mapValue.locationName, 'value')}");
+#if($member.shape.sparse)
+ ${macro.spaces} if(${macro.resultVarName}ValNode.IsNull() || ${macro.resultVarName}ValNode.GetText().empty()) {
+ ${macro.spaces} ${macro.resultVarName}[#deserializeXmlSingleElement($member.shape.mapKey, "${macro.resultVarName}KeyNode")] = Aws::Crt::Optional<$CppViewHelper.computeCppType($member.shape.mapValue.shape)>{};
+ ${macro.spaces} } else {
+ ${macro.spaces} ${macro.resultVarName}[#deserializeXmlSingleElement($member.shape.mapKey, "${macro.resultVarName}KeyNode")] =
+ ${macro.spaces} #deserializeXmlSingleElement($member.shape.mapValue, "${macro.resultVarName}ValNode", $macro.spaces, false);
+ ${macro.spaces} }
+#else
${macro.spaces} ${macro.resultVarName}[#deserializeXmlSingleElement($member.shape.mapKey, "${macro.resultVarName}KeyNode")] =
${macro.spaces} #deserializeXmlSingleElement($member.shape.mapValue, "${macro.resultVarName}ValNode", $macro.spaces, false);
+#end
${macro.spaces} ${macro.resultVarName}EntryNode = ${macro.resultVarName}EntryNode.NextNode("${CppViewHelper.ifNotNullOrEmpty($member.locationName, 'entry')}");
${macro.spaces} }
${macro.spaces} return ${macro.resultVarName};
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlListPayloadElement.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlListPayloadElement.vm
index cacc0d8899a9..a046ef956287 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlListPayloadElement.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlListPayloadElement.vm
@@ -29,6 +29,15 @@
## 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
+#if($member.shape.sparse)
+ ${spaces} if(!${macro.listItemVarName}.has_value()) {
+ ${spaces} XmlNode ${lowerCaseVarName}NilNode = ${macro.listMemberParentNode}.CreateChildElement("${macro.listMemberSerializationName}");
+ ${spaces} ${lowerCaseVarName}NilNode.SetAttributeValue("xsi:nil", "true");
+ ${spaces} } else {
+#serializeXmlSinglePayloadElement($macro.listSpaces, $macro.listMemberSerializationName, $lowerCaseVarName, $member.shape.listMember, "(*${macro.listItemVarName})", $macro.listMemberParentNode)
+ ${spaces} }
+#else
#serializeXmlSinglePayloadElement($macro.listSpaces, $macro.listMemberSerializationName, $lowerCaseVarName, $member.shape.listMember, $macro.listItemVarName, $macro.listMemberParentNode)
+#end
${spaces}}
#end##macro serializeXmlListPayloadElement
\ No newline at end of file
diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlMapPayloadElement.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlMapPayloadElement.vm
index abd754414e4a..23fa939fe361 100644
--- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlMapPayloadElement.vm
+++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlSerializeTemplateMacros/serializeXmlMapPayloadElement.vm
@@ -25,6 +25,15 @@
#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")
+#if($member.shape.sparse)
+ ${spaces} if(!${macro.mapItemVarName}.second.has_value()) {
+ ${spaces} XmlNode ${lowerCaseVarName}NilNode = ${lowerCaseVarName}MapEntryNode.CreateChildElement("${macro.mapValueSerializationName}");
+ ${spaces} ${lowerCaseVarName}NilNode.SetAttributeValue("xsi:nil", "true");
+ ${spaces} } else {
+#serializeXmlSinglePayloadElement($macro.mapSpaces, $macro.mapValueSerializationName, "${lowerCaseVarName}Value", $member.shape.mapValue, "(*${macro.mapItemVarName}.second)", "${lowerCaseVarName}MapEntryNode")
+ ${spaces} }
+#else
#serializeXmlSinglePayloadElement($macro.mapSpaces, $macro.mapValueSerializationName, "${lowerCaseVarName}Value", $member.shape.mapValue, "${macro.mapItemVarName}.second", "${lowerCaseVarName}MapEntryNode")
+#end
${spaces}}
#end##macro serializeXmlMapPayloadElement
\ No newline at end of file
diff --git a/tools/scripts/run_code_generation.py b/tools/scripts/run_code_generation.py
index 82a5a5acecee..787c66a94ae5 100644
--- a/tools/scripts/run_code_generation.py
+++ b/tools/scripts/run_code_generation.py
@@ -161,7 +161,10 @@ def main():
return -1
if args["generate_protocol_tests"]:
- protocol_tests_generator = ProtocolTestsGen(args)
+ # Disable smithy generation for protocol tests
+ protocol_args = args.copy()
+ protocol_args["disable_smithy_generation"] = True
+ protocol_tests_generator = ProtocolTestsGen(protocol_args)
if protocol_tests_generator.generate(executor, max_workers) != 0:
print("ERROR: Failed to generate protocol test(s)!")
return -1
From 24302842b8bc0050283ed9d12d1691ff480cc561 Mon Sep 17 00:00:00 2001
From: kai lin
Date: Wed, 25 Mar 2026 13:00:39 -0400
Subject: [PATCH 2/2] protocol test
---
.../aws/json-protocol/JsonProtocolClient.h | 29 +-
.../JsonProtocolServiceClientModel.h | 8 +
.../aws/json-protocol/model/ComplexError.h | 2 +-
.../model/ContentTypeParametersResult.h | 4 +
.../model/DatetimeOffsetsResult.h | 6 +-
.../json-protocol/model/ErrorWithMembers.h | 12 +-
.../model/FractionalSecondsResult.h | 6 +-
.../model/GreetingWithErrorsResult.h | 6 +-
.../json-protocol/model/JsonEnumsRequest.h | 12 +-
.../aws/json-protocol/model/JsonEnumsResult.h | 16 +-
.../json-protocol/model/JsonIntEnumsRequest.h | 12 +-
.../json-protocol/model/JsonIntEnumsResult.h | 16 +-
.../json-protocol/model/JsonUnionsRequest.h | 2 +-
.../json-protocol/model/JsonUnionsResult.h | 6 +-
.../aws/json-protocol/model/KitchenSink.h | 52 +-
.../model/KitchenSinkOperationRequest.h | 52 +-
.../model/KitchenSinkOperationResult.h | 56 +-
.../include/aws/json-protocol/model/MyUnion.h | 16 +-
.../model/NullOperationRequest.h | 2 +-
.../json-protocol/model/NullOperationResult.h | 6 +-
.../OperationWithOptionalInputOutputResult.h | 6 +-
.../model/PutAndGetInlineDocumentsRequest.h | 2 +-
.../model/PutAndGetInlineDocumentsResult.h | 6 +-
.../model/PutWithContentEncodingRequest.h | 2 +-
.../model/SimpleScalarPropertiesRequest.h | 4 +-
.../model/SimpleScalarPropertiesResult.h | 8 +-
.../model/SparseNullsOperationRequest.h | 118 +
.../model/SparseNullsOperationResult.h | 115 +
.../source/JsonProtocolClient.cpp | 38 +-
.../model/ContentTypeParametersResult.cpp | 1 +
.../source/model/DatetimeOffsetsResult.cpp | 1 +
.../source/model/FractionalSecondsResult.cpp | 1 +
.../source/model/GreetingWithErrorsResult.cpp | 1 +
.../source/model/JsonEnumsResult.cpp | 1 +
.../source/model/JsonIntEnumsResult.cpp | 1 +
.../source/model/JsonUnionsResult.cpp | 1 +
.../source/model/KitchenSink.cpp | 44 +-
.../model/KitchenSinkOperationResult.cpp | 45 +-
.../source/model/NullOperationResult.cpp | 1 +
...OperationWithOptionalInputOutputResult.cpp | 1 +
.../model/PutAndGetInlineDocumentsResult.cpp | 1 +
.../model/SimpleScalarPropertiesResult.cpp | 1 +
.../model/SparseNullsOperationRequest.cpp | 57 +
.../model/SparseNullsOperationResult.cpp | 56 +
.../RestJsonProtocolClient.h | 115 +-
.../RestJsonProtocolServiceClientModel.h | 32 +
.../model/AllQueryStringTypesRequest.h | 40 +-
.../rest-json-protocol/model/ComplexError.h | 4 +-
.../ConstantAndVariableQueryStringRequest.h | 2 +-
.../model/ContentTypeParametersResult.h | 4 +
.../model/DatetimeOffsetsResult.h | 6 +-
.../model/DocumentTypeAsMapValueRequest.h | 2 +-
.../model/DocumentTypeAsMapValueResult.h | 6 +-
.../model/DocumentTypeAsPayloadRequest.h | 2 +-
.../model/DocumentTypeAsPayloadResult.h | 6 +-
.../model/DocumentTypeRequest.h | 4 +-
.../model/DocumentTypeResult.h | 8 +-
.../model/EmptyInputAndEmptyOutputResult.h | 4 +
.../model/FractionalSecondsResult.h | 6 +-
.../model/GreetingWithErrorsResult.h | 6 +-
.../model/HttpChecksumRequiredRequest.h | 2 +-
.../model/HttpChecksumRequiredResult.h | 6 +-
.../model/HttpEmptyPrefixHeadersRequest.h | 81 +
.../model/HttpEmptyPrefixHeadersResult.h | 97 +
.../model/HttpEnumPayloadRequest.h | 2 +-
.../model/HttpEnumPayloadResult.h | 6 +-
.../model/HttpPayloadTraitsRequest.h | 2 +-
.../model/HttpPayloadTraitsResult.h | 8 +-
.../model/HttpPayloadWithStructureRequest.h | 2 +-
.../model/HttpPayloadWithStructureResult.h | 6 +-
.../model/HttpPayloadWithUnionRequest.h | 2 +-
.../model/HttpPayloadWithUnionResult.h | 6 +-
.../model/HttpPrefixHeadersInResponseResult.h | 6 +-
.../model/HttpPrefixHeadersRequest.h | 2 +-
.../model/HttpPrefixHeadersResult.h | 8 +-
.../HttpQueryParamsOnlyOperationRequest.h | 65 +
.../model/HttpRequestWithFloatLabelsRequest.h | 2 +-
.../HttpRequestWithGreedyLabelInPathRequest.h | 2 +-
...questWithLabelsAndTimestampFormatRequest.h | 12 +-
.../model/HttpRequestWithLabelsRequest.h | 14 +-
.../model/HttpResponseCodeResult.h | 6 +-
.../model/HttpStringPayloadResult.h | 6 +-
.../model/IgnoreQueryParamsInResponseResult.h | 6 +-
.../model/InputAndOutputWithHeadersRequest.h | 36 +-
.../model/InputAndOutputWithHeadersResult.h | 40 +-
.../model/JsonBlobsRequest.h | 2 +-
.../model/JsonBlobsResult.h | 6 +-
.../model/JsonEnumsRequest.h | 12 +-
.../model/JsonEnumsResult.h | 16 +-
.../model/JsonIntEnumsRequest.h | 12 +-
.../model/JsonIntEnumsResult.h | 16 +-
.../model/JsonListsRequest.h | 18 +-
.../model/JsonListsResult.h | 22 +-
.../model/JsonMapsRequest.h | 10 +-
.../rest-json-protocol/model/JsonMapsResult.h | 14 +-
.../model/JsonTimestampsRequest.h | 14 +-
.../model/JsonTimestampsResult.h | 18 +-
.../model/JsonUnionsRequest.h | 2 +-
.../model/JsonUnionsResult.h | 6 +-
.../model/MediaTypeHeaderResult.h | 6 +-
.../aws/rest-json-protocol/model/MyUnion.h | 18 +-
.../rest-json-protocol/model/NestedPayload.h | 2 +-
.../model/NoInputAndOutputResult.h | 4 +
.../model/NullAndEmptyHeadersClientRequest.h | 6 +-
.../model/NullAndEmptyHeadersClientResult.h | 10 +-
.../model/NullAndEmptyHeadersServerRequest.h | 6 +-
.../model/NullAndEmptyHeadersServerResult.h | 10 +-
.../OmitsNullSerializesEmptyStringRequest.h | 2 +-
.../model/OmitsSerializingEmptyListsRequest.h | 12 +-
.../model/PostUnionWithJsonNameResult.h | 6 +-
.../model/PutWithContentEncodingRequest.h | 2 +-
.../model/QueryParamsAsStringListMapRequest.h | 2 +-
.../model/QueryPrecedenceRequest.h | 2 +-
.../model/RecursiveShapesInputOutputNested1.h | 2 +-
.../model/RecursiveShapesInputOutputNested2.h | 2 +-
.../model/RecursiveShapesRequest.h | 2 +-
.../model/RecursiveShapesResult.h | 6 +-
.../model/ResponseCodeHttpFallbackResult.h | 4 +
.../model/ResponseCodeRequiredResult.h | 6 +-
.../model/SimpleScalarPropertiesRequest.h | 20 +-
.../model/SimpleScalarPropertiesResult.h | 24 +-
.../model/SparseJsonListsRequest.h | 116 +
.../model/SparseJsonListsResult.h | 113 +
.../model/SparseJsonMapsRequest.h | 207 ++
.../model/SparseJsonMapsResult.h | 201 ++
.../model/StructureListMember.h | 2 +-
.../model/TestBodyStructureRequest.h | 4 +-
.../model/TestBodyStructureResult.h | 8 +-
.../model/TestGetNoInputNoPayloadResult.h | 6 +-
.../model/TestGetNoPayloadRequest.h | 2 +-
.../model/TestGetNoPayloadResult.h | 6 +-
.../model/TestPayloadBlobResult.h | 6 +-
.../model/TestPayloadStructureRequest.h | 4 +-
.../model/TestPayloadStructureResult.h | 8 +-
.../model/TestPostNoInputNoPayloadResult.h | 6 +-
.../model/TestPostNoPayloadRequest.h | 2 +-
.../model/TestPostNoPayloadResult.h | 6 +-
.../model/TimestampFormatHeadersRequest.h | 14 +-
.../model/TimestampFormatHeadersResult.h | 18 +-
.../model/UnionWithJsonName.h | 4 +-
.../source/RestJsonProtocolClient.cpp | 134 +-
.../model/ContentTypeParametersResult.cpp | 1 +
.../source/model/DatetimeOffsetsResult.cpp | 1 +
.../model/DocumentTypeAsMapValueResult.cpp | 1 +
.../model/DocumentTypeAsPayloadResult.cpp | 1 +
.../source/model/DocumentTypeResult.cpp | 1 +
.../model/EmptyInputAndEmptyOutputResult.cpp | 1 +
.../source/model/FractionalSecondsResult.cpp | 1 +
.../source/model/GreetingWithErrorsResult.cpp | 1 +
.../model/HttpChecksumRequiredResult.cpp | 1 +
.../model/HttpEmptyPrefixHeadersRequest.cpp | 36 +
.../model/HttpEmptyPrefixHeadersResult.cpp | 50 +
.../source/model/HttpEnumPayloadResult.cpp | 1 +
.../source/model/HttpPayloadTraitsResult.cpp | 1 +
.../model/HttpPayloadWithStructureResult.cpp | 1 +
.../model/HttpPayloadWithUnionResult.cpp | 1 +
.../HttpPrefixHeadersInResponseResult.cpp | 1 +
.../source/model/HttpPrefixHeadersResult.cpp | 1 +
.../HttpQueryParamsOnlyOperationRequest.cpp | 29 +
.../source/model/HttpResponseCodeResult.cpp | 1 +
.../source/model/HttpStringPayloadResult.cpp | 1 +
.../IgnoreQueryParamsInResponseResult.cpp | 1 +
.../model/InputAndOutputWithHeadersResult.cpp | 1 +
.../source/model/JsonBlobsResult.cpp | 1 +
.../source/model/JsonEnumsResult.cpp | 1 +
.../source/model/JsonIntEnumsResult.cpp | 1 +
.../source/model/JsonListsResult.cpp | 13 +-
.../source/model/JsonMapsResult.cpp | 13 +-
.../source/model/JsonTimestampsResult.cpp | 1 +
.../source/model/JsonUnionsResult.cpp | 1 +
.../source/model/MediaTypeHeaderResult.cpp | 1 +
.../source/model/NoInputAndOutputResult.cpp | 1 +
.../model/NullAndEmptyHeadersClientResult.cpp | 1 +
.../model/NullAndEmptyHeadersServerResult.cpp | 1 +
.../model/PostUnionWithJsonNameResult.cpp | 1 +
.../source/model/RecursiveShapesResult.cpp | 1 +
.../model/ResponseCodeHttpFallbackResult.cpp | 1 +
.../model/ResponseCodeRequiredResult.cpp | 1 +
.../model/SimpleScalarPropertiesResult.cpp | 1 +
.../source/model/SparseJsonListsRequest.cpp | 56 +
.../source/model/SparseJsonListsResult.cpp | 56 +
.../source/model/SparseJsonMapsRequest.cpp | 96 +
.../source/model/SparseJsonMapsResult.cpp | 95 +
.../source/model/TestBodyStructureResult.cpp | 1 +
.../model/TestGetNoInputNoPayloadResult.cpp | 1 +
.../source/model/TestGetNoPayloadResult.cpp | 1 +
.../source/model/TestPayloadBlobResult.cpp | 1 +
.../model/TestPayloadStructureResult.cpp | 1 +
.../model/TestPostNoInputNoPayloadResult.cpp | 1 +
.../source/model/TestPostNoPayloadResult.cpp | 1 +
.../model/TimestampFormatHeadersResult.cpp | 1 +
.../aws/rpcv2protocol/RpcV2ProtocolClient.h | 54 +-
.../RpcV2ProtocolServiceClientModel.h | 16 +
.../aws/rpcv2protocol/model/ComplexError.h | 2 +-
.../model/EmptyInputOutputResult.h | 4 +
.../aws/rpcv2protocol/model/Float16Result.h | 6 +-
.../model/FractionalSecondsResult.h | 6 +-
.../model/GreetingWithErrorsResult.h | 6 +-
.../model/OptionalInputOutputRequest.h | 2 +-
.../model/OptionalInputOutputResult.h | 6 +-
.../model/RecursiveShapesInputOutputNested1.h | 2 +-
.../model/RecursiveShapesInputOutputNested2.h | 2 +-
.../model/RecursiveShapesRequest.h | 2 +-
.../model/RecursiveShapesResult.h | 6 +-
.../model/RpcV2CborDenseMapsRequest.h | 10 +-
.../model/RpcV2CborDenseMapsResult.h | 14 +-
.../model/RpcV2CborListsRequest.h | 20 +-
.../model/RpcV2CborListsResult.h | 24 +-
.../model/RpcV2CborSparseMapsRequest.h | 207 ++
.../model/RpcV2CborSparseMapsResult.h | 201 ++
.../model/SimpleScalarPropertiesRequest.h | 20 +-
.../model/SimpleScalarPropertiesResult.h | 24 +-
.../model/SparseNullsOperationRequest.h | 118 +
.../model/SparseNullsOperationResult.h | 115 +
.../rpcv2protocol/model/StructureListMember.h | 2 +-
.../rpcv2protocol/model/ValidationException.h | 2 +-
.../model/ValidationExceptionField.h | 2 +-
.../source/RpcV2ProtocolClient.cpp | 70 +-
.../source/model/ComplexError.cpp | 8 +-
.../source/model/ComplexNestedErrorData.cpp | 8 +-
.../source/model/EmptyInputOutputResult.cpp | 111 +-
.../source/model/Float16Result.cpp | 63 +-
.../source/model/FractionalSecondsResult.cpp | 63 +-
.../source/model/GreetingStruct.cpp | 8 +-
.../source/model/GreetingWithErrorsResult.cpp | 63 +-
.../model/OptionalInputOutputResult.cpp | 63 +-
.../RecursiveShapesInputOutputNested1.cpp | 8 +-
.../RecursiveShapesInputOutputNested2.cpp | 8 +-
.../source/model/RecursiveShapesResult.cpp | 63 +-
.../source/model/RpcV2CborDenseMapsResult.cpp | 63 +-
.../source/model/RpcV2CborListsResult.cpp | 63 +-
.../model/RpcV2CborSparseMapsRequest.cpp | 129 +
.../model/RpcV2CborSparseMapsResult.cpp | 1163 +++++++
.../model/SimpleScalarPropertiesResult.cpp | 63 +-
.../model/SparseNullsOperationRequest.cpp | 74 +
.../model/SparseNullsOperationResult.cpp | 494 +++
.../source/model/StructureListMember.cpp | 8 +-
.../source/model/ValidationException.cpp | 8 +-
.../source/model/ValidationExceptionField.cpp | 8 +-
.../input/json/tests/EmptyOperationTest.cpp | 6 +-
.../json/tests/EndpointOperationTest.cpp | 2 +-
.../EndpointWithHostLabelOperationTest.cpp | 4 +-
.../json/tests/HostWithPathOperationTest.cpp | 2 +-
.../tests/input/json/tests/JsonEnumsTest.cpp | 2 +-
.../input/json/tests/JsonIntEnumsTest.cpp | 2 +-
.../tests/input/json/tests/JsonUnionsTest.cpp | 18 +-
.../json/tests/KitchenSinkOperationTest.cpp | 56 +-
.../input/json/tests/NullOperationTest.cpp | 2 +-
.../OperationWithOptionalInputOutputTest.cpp | 8 +-
.../tests/PutAndGetInlineDocumentsTest.cpp | 2 +-
.../json/tests/SimpleScalarPropertiesTest.cpp | 6 +-
.../json/tests/SparseNullsOperationTest.cpp | 48 +
.../tests/HttpEmptyPrefixHeadersTest.cpp | 30 +
.../rest-json/tests/HttpPayloadTraitsTest.cpp | 2 +-
.../rest-json/tests/HttpPrefixHeadersTest.cpp | 2 +-
.../HttpQueryParamsOnlyOperationTest.cpp | 44 +
.../tests/InputAndOutputWithHeadersTest.cpp | 20 +-
.../tests/SimpleScalarPropertiesTest.cpp | 2 +-
.../rest-json/tests/SparseJsonListsTest.cpp | 35 +
.../rest-json/tests/SparseJsonMapsTest.cpp | 126 +
.../tests/TestPayloadStructureTest.cpp | 2 +-
.../tests/TimestampFormatHeadersTest.cpp | 8 +-
.../tests/EmptyInputOutputTest.cpp | 2 +-
.../tests/OptionalInputOutputTest.cpp | 2 +-
.../tests/RecursiveShapesTest.cpp | 2 +-
.../tests/RpcV2CborDenseMapsTest.cpp | 6 +-
.../tests/RpcV2CborListsTest.cpp | 6 +-
.../tests/RpcV2CborSparseMapsTest.cpp | 219 ++
.../tests/SimpleScalarPropertiesTest.cpp | 10 +-
.../tests/SparseNullsOperationTest.cpp | 71 +
.../json/tests/GreetingWithErrors1Test.cpp | 17 +
.../output/json/tests/JsonIntEnumsTest.cpp | 2 +-
.../json/tests/SparseNullsOperationTest.cpp | 57 +
.../tests/GreetingWithErrors0Test.cpp | 130 +-
.../tests/GreetingWithErrors1Test.cpp | 4 +-
.../tests/GreetingWithErrors2Test.cpp | 147 +-
.../tests/HttpEmptyPrefixHeadersTest.cpp | 37 +
.../tests/HttpPayloadWithStructureTest.cpp | 18 +
.../tests/HttpPrefixHeadersInResponseTest.cpp | 2 +-
.../rest-json/tests/HttpPrefixHeadersTest.cpp | 2 +-
.../tests/IgnoreQueryParamsInResponseTest.cpp | 24 +-
.../tests/InputAndOutputWithHeadersTest.cpp | 20 +-
.../output/rest-json/tests/JsonMapsTest.cpp | 33 -
.../tests/SimpleScalarPropertiesTest.cpp | 2 +-
.../rest-json/tests/SparseJsonListsTest.cpp | 43 +
.../rest-json/tests/SparseJsonMapsTest.cpp | 176 ++
.../tests/TimestampFormatHeadersTest.cpp | 8 +-
.../tests/EmptyInputOutputTest.cpp | 4 +-
.../smithy-rpc-v2-cbor/tests/Float16Test.cpp | 10 +-
.../tests/FractionalSecondsTest.cpp | 2 +-
.../tests/GreetingWithErrors0Test.cpp | 4 +-
.../tests/GreetingWithErrorsTest.cpp | 2 +-
.../tests/NoInputOutputTest.cpp | 4 +-
.../tests/OptionalInputOutputTest.cpp | 2 +-
.../tests/RecursiveShapesTest.cpp | 4 +-
.../tests/RpcV2CborDenseMapsTest.cpp | 39 +-
.../tests/RpcV2CborListsTest.cpp | 8 +-
.../tests/RpcV2CborSparseMapsTest.cpp | 168 ++
.../tests/SimpleScalarPropertiesTest.cpp | 16 +-
.../tests/SparseNullsOperationTest.cpp | 57 +
.../aws/testing/AwsProtocolTestHelpers.h | 16 +-
.../json-protocol-2018-01-01.normal.json | 42 +-
.../rest-json-protocol-2019-12-16.normal.json | 233 +-
.../rpcv2protocol-2020-07-14.normal.json | 76 +-
.../protocol-tests/input/json.json | 973 +++---
.../protocol-tests/input/rest-json.json | 2675 ++++++++++++-----
.../input/smithy-rpc-v2-cbor.json | 871 ++++--
.../protocol-tests/output/json.json | 770 +++--
.../protocol-tests/output/rest-json.json | 2187 +++++++++-----
.../output/smithy-rpc-v2-cbor.json | 1066 +++++--
310 files changed, 13125 insertions(+), 4234 deletions(-)
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/SparseNullsOperationRequest.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/SparseNullsOperationResult.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/source/model/SparseNullsOperationRequest.cpp
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/source/model/SparseNullsOperationResult.cpp
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/include/aws/rest-json-protocol/model/HttpEmptyPrefixHeadersRequest.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/include/aws/rest-json-protocol/model/HttpEmptyPrefixHeadersResult.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/include/aws/rest-json-protocol/model/HttpQueryParamsOnlyOperationRequest.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/include/aws/rest-json-protocol/model/SparseJsonListsRequest.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/include/aws/rest-json-protocol/model/SparseJsonListsResult.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/include/aws/rest-json-protocol/model/SparseJsonMapsRequest.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/include/aws/rest-json-protocol/model/SparseJsonMapsResult.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/source/model/HttpEmptyPrefixHeadersRequest.cpp
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/source/model/HttpEmptyPrefixHeadersResult.cpp
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/source/model/HttpQueryParamsOnlyOperationRequest.cpp
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/source/model/SparseJsonListsRequest.cpp
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/source/model/SparseJsonListsResult.cpp
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/source/model/SparseJsonMapsRequest.cpp
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rest-json-protocol/source/model/SparseJsonMapsResult.cpp
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rpcv2protocol/include/aws/rpcv2protocol/model/RpcV2CborSparseMapsRequest.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rpcv2protocol/include/aws/rpcv2protocol/model/RpcV2CborSparseMapsResult.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rpcv2protocol/include/aws/rpcv2protocol/model/SparseNullsOperationRequest.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rpcv2protocol/include/aws/rpcv2protocol/model/SparseNullsOperationResult.h
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rpcv2protocol/source/model/RpcV2CborSparseMapsRequest.cpp
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rpcv2protocol/source/model/RpcV2CborSparseMapsResult.cpp
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rpcv2protocol/source/model/SparseNullsOperationRequest.cpp
create mode 100644 generated/protocol-tests/test-clients/aws-cpp-sdk-rpcv2protocol/source/model/SparseNullsOperationResult.cpp
create mode 100644 generated/protocol-tests/tests/input/json/tests/SparseNullsOperationTest.cpp
create mode 100644 generated/protocol-tests/tests/input/rest-json/tests/HttpEmptyPrefixHeadersTest.cpp
create mode 100644 generated/protocol-tests/tests/input/rest-json/tests/HttpQueryParamsOnlyOperationTest.cpp
create mode 100644 generated/protocol-tests/tests/input/rest-json/tests/SparseJsonListsTest.cpp
create mode 100644 generated/protocol-tests/tests/input/rest-json/tests/SparseJsonMapsTest.cpp
create mode 100644 generated/protocol-tests/tests/input/smithy-rpc-v2-cbor/tests/RpcV2CborSparseMapsTest.cpp
create mode 100644 generated/protocol-tests/tests/input/smithy-rpc-v2-cbor/tests/SparseNullsOperationTest.cpp
create mode 100644 generated/protocol-tests/tests/output/json/tests/SparseNullsOperationTest.cpp
create mode 100644 generated/protocol-tests/tests/output/rest-json/tests/HttpEmptyPrefixHeadersTest.cpp
create mode 100644 generated/protocol-tests/tests/output/rest-json/tests/SparseJsonListsTest.cpp
create mode 100644 generated/protocol-tests/tests/output/rest-json/tests/SparseJsonMapsTest.cpp
create mode 100644 generated/protocol-tests/tests/output/smithy-rpc-v2-cbor/tests/RpcV2CborSparseMapsTest.cpp
create mode 100644 generated/protocol-tests/tests/output/smithy-rpc-v2-cbor/tests/SparseNullsOperationTest.cpp
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/JsonProtocolClient.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/JsonProtocolClient.h
index 2381c6fae2d6..e038ec49e4a7 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/JsonProtocolClient.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/JsonProtocolClient.h
@@ -516,8 +516,33 @@ class AWS_JSONPROTOCOL_API JsonProtocolClient : public Aws::Client::AWSJsonClien
return SubmitAsync(&JsonProtocolClient::SimpleScalarProperties, request, handler, context);
}
- void OverrideEndpoint(const Aws::String& endpoint);
- std::shared_ptr& accessEndpointProvider();
+ /**
+ *
+ */
+ virtual Model::SparseNullsOperationOutcome SparseNullsOperation(const Model::SparseNullsOperationRequest& request = {}) const;
+
+ /**
+ * A Callable wrapper for SparseNullsOperation that returns a future to the operation so that it can be executed in parallel to other
+ * requests.
+ */
+ template
+ Model::SparseNullsOperationOutcomeCallable SparseNullsOperationCallable(const SparseNullsOperationRequestT& request = {}) const {
+ return SubmitCallable(&JsonProtocolClient::SparseNullsOperation, request);
+ }
+
+ /**
+ * An Async wrapper for SparseNullsOperation that queues the request into a thread executor and triggers associated callback when
+ * operation has finished.
+ */
+ template
+ void SparseNullsOperationAsync(const SparseNullsOperationResponseReceivedHandler& handler,
+ const std::shared_ptr& context = nullptr,
+ const SparseNullsOperationRequestT& request = {}) const {
+ return SubmitAsync(&JsonProtocolClient::SparseNullsOperation, request, handler, context);
+ }
+
+ virtual void OverrideEndpoint(const Aws::String& endpoint);
+ virtual std::shared_ptr& accessEndpointProvider();
private:
friend class Aws::Client::ClientWithAsyncTemplateMethods;
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/JsonProtocolServiceClientModel.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/JsonProtocolServiceClientModel.h
index 04f67d731085..3590f73855ce 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/JsonProtocolServiceClientModel.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/JsonProtocolServiceClientModel.h
@@ -48,6 +48,8 @@
#include
#include
#include
+#include
+#include
/* End of service model headers required in JsonProtocolClient header */
namespace Aws {
@@ -98,6 +100,7 @@ class OperationWithOptionalInputOutputRequest;
class PutAndGetInlineDocumentsRequest;
class PutWithContentEncodingRequest;
class SimpleScalarPropertiesRequest;
+class SparseNullsOperationRequest;
/* End of service model forward declarations required in JsonProtocolClient header */
/* Service model Outcome class definitions */
@@ -118,6 +121,7 @@ typedef Aws::Utils::Outcome PutAndGetInlineDocumentsOutcome;
typedef Aws::Utils::Outcome PutWithContentEncodingOutcome;
typedef Aws::Utils::Outcome SimpleScalarPropertiesOutcome;
+typedef Aws::Utils::Outcome SparseNullsOperationOutcome;
/* End of service model Outcome class definitions */
/* Service model Outcome callable definitions */
@@ -138,6 +142,7 @@ typedef std::future OperationWithOption
typedef std::future PutAndGetInlineDocumentsOutcomeCallable;
typedef std::future PutWithContentEncodingOutcomeCallable;
typedef std::future SimpleScalarPropertiesOutcomeCallable;
+typedef std::future SparseNullsOperationOutcomeCallable;
/* End of service model Outcome callable definitions */
} // namespace Model
@@ -197,6 +202,9 @@ typedef std::function&)>
SimpleScalarPropertiesResponseReceivedHandler;
+typedef std::function&)>
+ SparseNullsOperationResponseReceivedHandler;
/* End of service model async handlers definitions */
} // namespace JsonProtocol
} // namespace Aws
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/ComplexError.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/ComplexError.h
index 46593b6e1ced..4bcfd12d6892 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/ComplexError.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/ComplexError.h
@@ -65,9 +65,9 @@ class ComplexError {
///@}
private:
Aws::String m_topLevel;
- bool m_topLevelHasBeenSet = false;
ComplexNestedErrorData m_nested;
+ bool m_topLevelHasBeenSet = false;
bool m_nestedHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/ContentTypeParametersResult.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/ContentTypeParametersResult.h
index 6948acc3660e..aff9d6c88994 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/ContentTypeParametersResult.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/ContentTypeParametersResult.h
@@ -4,6 +4,7 @@
*/
#pragma once
+#include
#include
#include
@@ -40,8 +41,11 @@ class ContentTypeParametersResult {
return *this;
}
///@}
+ inline Aws::Http::HttpResponseCode GetHttpResponseCode() const { return m_HttpResponseCode; }
+
private:
Aws::String m_requestId;
+ Aws::Http::HttpResponseCode m_HttpResponseCode;
bool m_requestIdHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/DatetimeOffsetsResult.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/DatetimeOffsetsResult.h
index ffd050ee6983..a5ffb1a49c37 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/DatetimeOffsetsResult.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/DatetimeOffsetsResult.h
@@ -4,6 +4,7 @@
*/
#pragma once
+#include
#include
#include
#include
@@ -56,11 +57,14 @@ class DatetimeOffsetsResult {
return *this;
}
///@}
+ inline Aws::Http::HttpResponseCode GetHttpResponseCode() const { return m_HttpResponseCode; }
+
private:
Aws::Utils::DateTime m_datetime{};
- bool m_datetimeHasBeenSet = false;
Aws::String m_requestId;
+ Aws::Http::HttpResponseCode m_HttpResponseCode;
+ bool m_datetimeHasBeenSet = false;
bool m_requestIdHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/ErrorWithMembers.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/ErrorWithMembers.h
index 1635071bc0fa..ffa4b474ba69 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/ErrorWithMembers.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/ErrorWithMembers.h
@@ -154,24 +154,24 @@ class ErrorWithMembers {
///@}
private:
Aws::String m_code;
- bool m_codeHasBeenSet = false;
KitchenSink m_complexData;
- bool m_complexDataHasBeenSet = false;
int m_integerField{0};
- bool m_integerFieldHasBeenSet = false;
Aws::Vector m_listField;
- bool m_listFieldHasBeenSet = false;
Aws::Map m_mapField;
- bool m_mapFieldHasBeenSet = false;
Aws::String m_message;
- bool m_messageHasBeenSet = false;
Aws::String m_stringField;
+ bool m_codeHasBeenSet = false;
+ bool m_complexDataHasBeenSet = false;
+ bool m_integerFieldHasBeenSet = false;
+ bool m_listFieldHasBeenSet = false;
+ bool m_mapFieldHasBeenSet = false;
+ bool m_messageHasBeenSet = false;
bool m_stringFieldHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/FractionalSecondsResult.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/FractionalSecondsResult.h
index 70d8b5f8f306..06692f7acc66 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/FractionalSecondsResult.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/FractionalSecondsResult.h
@@ -4,6 +4,7 @@
*/
#pragma once
+#include
#include
#include
#include
@@ -56,11 +57,14 @@ class FractionalSecondsResult {
return *this;
}
///@}
+ inline Aws::Http::HttpResponseCode GetHttpResponseCode() const { return m_HttpResponseCode; }
+
private:
Aws::Utils::DateTime m_datetime{};
- bool m_datetimeHasBeenSet = false;
Aws::String m_requestId;
+ Aws::Http::HttpResponseCode m_HttpResponseCode;
+ bool m_datetimeHasBeenSet = false;
bool m_requestIdHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/GreetingWithErrorsResult.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/GreetingWithErrorsResult.h
index 6e2142d41a0b..f8afaf5f532c 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/GreetingWithErrorsResult.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/GreetingWithErrorsResult.h
@@ -4,6 +4,7 @@
*/
#pragma once
+#include
#include
#include
@@ -55,11 +56,14 @@ class GreetingWithErrorsResult {
return *this;
}
///@}
+ inline Aws::Http::HttpResponseCode GetHttpResponseCode() const { return m_HttpResponseCode; }
+
private:
Aws::String m_greeting;
- bool m_greetingHasBeenSet = false;
Aws::String m_requestId;
+ Aws::Http::HttpResponseCode m_HttpResponseCode;
+ bool m_greetingHasBeenSet = false;
bool m_requestIdHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonEnumsRequest.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonEnumsRequest.h
index 6ad5dddbac6b..15d396a72435 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonEnumsRequest.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonEnumsRequest.h
@@ -155,24 +155,24 @@ class JsonEnumsRequest : public JsonProtocolRequest {
///@}
private:
FooEnum m_fooEnum1{FooEnum::NOT_SET};
- bool m_fooEnum1HasBeenSet = false;
FooEnum m_fooEnum2{FooEnum::NOT_SET};
- bool m_fooEnum2HasBeenSet = false;
FooEnum m_fooEnum3{FooEnum::NOT_SET};
- bool m_fooEnum3HasBeenSet = false;
Aws::Vector m_fooEnumList;
- bool m_fooEnumListHasBeenSet = false;
Aws::Vector m_fooEnumSet;
- bool m_fooEnumSetHasBeenSet = false;
Aws::Map m_fooEnumMap;
- bool m_fooEnumMapHasBeenSet = false;
Aws::String m_requestId;
+ bool m_fooEnum1HasBeenSet = false;
+ bool m_fooEnum2HasBeenSet = false;
+ bool m_fooEnum3HasBeenSet = false;
+ bool m_fooEnumListHasBeenSet = false;
+ bool m_fooEnumSetHasBeenSet = false;
+ bool m_fooEnumMapHasBeenSet = false;
bool m_requestIdHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonEnumsResult.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonEnumsResult.h
index b530b52add1e..ed9bd37eaca0 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonEnumsResult.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonEnumsResult.h
@@ -4,6 +4,7 @@
*/
#pragma once
+#include
#include
#include
#include
@@ -142,26 +143,29 @@ class JsonEnumsResult {
return *this;
}
///@}
+ inline Aws::Http::HttpResponseCode GetHttpResponseCode() const { return m_HttpResponseCode; }
+
private:
FooEnum m_fooEnum1{FooEnum::NOT_SET};
- bool m_fooEnum1HasBeenSet = false;
FooEnum m_fooEnum2{FooEnum::NOT_SET};
- bool m_fooEnum2HasBeenSet = false;
FooEnum m_fooEnum3{FooEnum::NOT_SET};
- bool m_fooEnum3HasBeenSet = false;
Aws::Vector m_fooEnumList;
- bool m_fooEnumListHasBeenSet = false;
Aws::Vector m_fooEnumSet;
- bool m_fooEnumSetHasBeenSet = false;
Aws::Map m_fooEnumMap;
- bool m_fooEnumMapHasBeenSet = false;
Aws::String m_requestId;
+ Aws::Http::HttpResponseCode m_HttpResponseCode;
+ bool m_fooEnum1HasBeenSet = false;
+ bool m_fooEnum2HasBeenSet = false;
+ bool m_fooEnum3HasBeenSet = false;
+ bool m_fooEnumListHasBeenSet = false;
+ bool m_fooEnumSetHasBeenSet = false;
+ bool m_fooEnumMapHasBeenSet = false;
bool m_requestIdHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonIntEnumsRequest.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonIntEnumsRequest.h
index d12f3c6c9c1d..2579bb54611c 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonIntEnumsRequest.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonIntEnumsRequest.h
@@ -154,24 +154,24 @@ class JsonIntEnumsRequest : public JsonProtocolRequest {
///@}
private:
int m_intEnum1{0};
- bool m_intEnum1HasBeenSet = false;
int m_intEnum2{0};
- bool m_intEnum2HasBeenSet = false;
int m_intEnum3{0};
- bool m_intEnum3HasBeenSet = false;
Aws::Vector m_intEnumList;
- bool m_intEnumListHasBeenSet = false;
Aws::Vector m_intEnumSet;
- bool m_intEnumSetHasBeenSet = false;
Aws::Map m_intEnumMap;
- bool m_intEnumMapHasBeenSet = false;
Aws::String m_requestId;
+ bool m_intEnum1HasBeenSet = false;
+ bool m_intEnum2HasBeenSet = false;
+ bool m_intEnum3HasBeenSet = false;
+ bool m_intEnumListHasBeenSet = false;
+ bool m_intEnumSetHasBeenSet = false;
+ bool m_intEnumMapHasBeenSet = false;
bool m_requestIdHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonIntEnumsResult.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonIntEnumsResult.h
index 84e6cdfe2970..c6b5915dedad 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonIntEnumsResult.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonIntEnumsResult.h
@@ -4,6 +4,7 @@
*/
#pragma once
+#include
#include
#include
#include
@@ -141,26 +142,29 @@ class JsonIntEnumsResult {
return *this;
}
///@}
+ inline Aws::Http::HttpResponseCode GetHttpResponseCode() const { return m_HttpResponseCode; }
+
private:
int m_intEnum1{0};
- bool m_intEnum1HasBeenSet = false;
int m_intEnum2{0};
- bool m_intEnum2HasBeenSet = false;
int m_intEnum3{0};
- bool m_intEnum3HasBeenSet = false;
Aws::Vector m_intEnumList;
- bool m_intEnumListHasBeenSet = false;
Aws::Vector m_intEnumSet;
- bool m_intEnumSetHasBeenSet = false;
Aws::Map m_intEnumMap;
- bool m_intEnumMapHasBeenSet = false;
Aws::String m_requestId;
+ Aws::Http::HttpResponseCode m_HttpResponseCode;
+ bool m_intEnum1HasBeenSet = false;
+ bool m_intEnum2HasBeenSet = false;
+ bool m_intEnum3HasBeenSet = false;
+ bool m_intEnumListHasBeenSet = false;
+ bool m_intEnumSetHasBeenSet = false;
+ bool m_intEnumMapHasBeenSet = false;
bool m_requestIdHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonUnionsRequest.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonUnionsRequest.h
index ca239690c0ee..06e05f641b9f 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonUnionsRequest.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonUnionsRequest.h
@@ -68,9 +68,9 @@ class JsonUnionsRequest : public JsonProtocolRequest {
///@}
private:
MyUnion m_contents;
- bool m_contentsHasBeenSet = false;
Aws::String m_requestId;
+ bool m_contentsHasBeenSet = false;
bool m_requestIdHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonUnionsResult.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonUnionsResult.h
index fa60c18aa915..8ee0df509d54 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonUnionsResult.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/JsonUnionsResult.h
@@ -4,6 +4,7 @@
*/
#pragma once
+#include
#include
#include
#include
@@ -62,11 +63,14 @@ class JsonUnionsResult {
return *this;
}
///@}
+ inline Aws::Http::HttpResponseCode GetHttpResponseCode() const { return m_HttpResponseCode; }
+
private:
MyUnion m_contents;
- bool m_contentsHasBeenSet = false;
Aws::String m_requestId;
+ Aws::Http::HttpResponseCode m_HttpResponseCode;
+ bool m_contentsHasBeenSet = false;
bool m_requestIdHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/KitchenSink.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/KitchenSink.h
index 5de6bc9a3d71..828a0f976544 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/KitchenSink.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/KitchenSink.h
@@ -516,84 +516,84 @@ class KitchenSink {
///@}
private:
Aws::Utils::ByteBuffer m_blob{};
- bool m_blobHasBeenSet = false;
bool m_boolean{false};
- bool m_booleanHasBeenSet = false;
double m_double{0.0};
- bool m_doubleHasBeenSet = false;
EmptyStruct m_emptyStruct;
- bool m_emptyStructHasBeenSet = false;
double m_float{0.0};
- bool m_floatHasBeenSet = false;
Aws::Utils::DateTime m_httpdateTimestamp{};
- bool m_httpdateTimestampHasBeenSet = false;
int m_integer{0};
- bool m_integerHasBeenSet = false;
Aws::Utils::DateTime m_iso8601Timestamp{};
- bool m_iso8601TimestampHasBeenSet = false;
Aws::String m_jsonValue;
- bool m_jsonValueHasBeenSet = false;
Aws::Vector> m_listOfLists;
- bool m_listOfListsHasBeenSet = false;
Aws::Vector> m_listOfMapsOfStrings;
- bool m_listOfMapsOfStringsHasBeenSet = false;
Aws::Vector m_listOfStrings;
- bool m_listOfStringsHasBeenSet = false;
Aws::Vector m_listOfStructs;
- bool m_listOfStructsHasBeenSet = false;
long long m_long{0};
- bool m_longHasBeenSet = false;
Aws::Map> m_mapOfListsOfStrings;
- bool m_mapOfListsOfStringsHasBeenSet = false;
Aws::Map> m_mapOfMaps;
- bool m_mapOfMapsHasBeenSet = false;
Aws::Map m_mapOfStrings;
- bool m_mapOfStringsHasBeenSet = false;
Aws::Map m_mapOfStructs;
- bool m_mapOfStructsHasBeenSet = false;
Aws::Vector m_recursiveList;
- bool m_recursiveListHasBeenSet = false;
Aws::Map m_recursiveMap;
- bool m_recursiveMapHasBeenSet = false;
std::shared_ptr m_recursiveStruct;
- bool m_recursiveStructHasBeenSet = false;
SimpleStruct m_simpleStruct;
- bool m_simpleStructHasBeenSet = false;
Aws::String m_string;
- bool m_stringHasBeenSet = false;
StructWithJsonName m_structWithJsonName;
- bool m_structWithJsonNameHasBeenSet = false;
Aws::Utils::DateTime m_timestamp{};
- bool m_timestampHasBeenSet = false;
Aws::Utils::DateTime m_unixTimestamp{};
- bool m_unixTimestampHasBeenSet = false;
Aws::String m_requestId;
+ bool m_blobHasBeenSet = false;
+ bool m_booleanHasBeenSet = false;
+ bool m_doubleHasBeenSet = false;
+ bool m_emptyStructHasBeenSet = false;
+ bool m_floatHasBeenSet = false;
+ bool m_httpdateTimestampHasBeenSet = false;
+ bool m_integerHasBeenSet = false;
+ bool m_iso8601TimestampHasBeenSet = false;
+ bool m_jsonValueHasBeenSet = false;
+ bool m_listOfListsHasBeenSet = false;
+ bool m_listOfMapsOfStringsHasBeenSet = false;
+ bool m_listOfStringsHasBeenSet = false;
+ bool m_listOfStructsHasBeenSet = false;
+ bool m_longHasBeenSet = false;
+ bool m_mapOfListsOfStringsHasBeenSet = false;
+ bool m_mapOfMapsHasBeenSet = false;
+ bool m_mapOfStringsHasBeenSet = false;
+ bool m_mapOfStructsHasBeenSet = false;
+ bool m_recursiveListHasBeenSet = false;
+ bool m_recursiveMapHasBeenSet = false;
+ bool m_recursiveStructHasBeenSet = false;
+ bool m_simpleStructHasBeenSet = false;
+ bool m_stringHasBeenSet = false;
+ bool m_structWithJsonNameHasBeenSet = false;
+ bool m_timestampHasBeenSet = false;
+ bool m_unixTimestampHasBeenSet = false;
bool m_requestIdHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/KitchenSinkOperationRequest.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/KitchenSinkOperationRequest.h
index ef6f587c5ed0..265e5ba1ab26 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/KitchenSinkOperationRequest.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/KitchenSinkOperationRequest.h
@@ -521,84 +521,84 @@ class KitchenSinkOperationRequest : public JsonProtocolRequest {
///@}
private:
Aws::Utils::ByteBuffer m_blob{};
- bool m_blobHasBeenSet = false;
bool m_boolean{false};
- bool m_booleanHasBeenSet = false;
double m_double{0.0};
- bool m_doubleHasBeenSet = false;
EmptyStruct m_emptyStruct;
- bool m_emptyStructHasBeenSet = false;
double m_float{0.0};
- bool m_floatHasBeenSet = false;
Aws::Utils::DateTime m_httpdateTimestamp{};
- bool m_httpdateTimestampHasBeenSet = false;
int m_integer{0};
- bool m_integerHasBeenSet = false;
Aws::Utils::DateTime m_iso8601Timestamp{};
- bool m_iso8601TimestampHasBeenSet = false;
Aws::String m_jsonValue;
- bool m_jsonValueHasBeenSet = false;
Aws::Vector> m_listOfLists;
- bool m_listOfListsHasBeenSet = false;
Aws::Vector> m_listOfMapsOfStrings;
- bool m_listOfMapsOfStringsHasBeenSet = false;
Aws::Vector m_listOfStrings;
- bool m_listOfStringsHasBeenSet = false;
Aws::Vector m_listOfStructs;
- bool m_listOfStructsHasBeenSet = false;
long long m_long{0};
- bool m_longHasBeenSet = false;
Aws::Map> m_mapOfListsOfStrings;
- bool m_mapOfListsOfStringsHasBeenSet = false;
Aws::Map> m_mapOfMaps;
- bool m_mapOfMapsHasBeenSet = false;
Aws::Map m_mapOfStrings;
- bool m_mapOfStringsHasBeenSet = false;
Aws::Map m_mapOfStructs;
- bool m_mapOfStructsHasBeenSet = false;
Aws::Vector m_recursiveList;
- bool m_recursiveListHasBeenSet = false;
Aws::Map m_recursiveMap;
- bool m_recursiveMapHasBeenSet = false;
KitchenSink m_recursiveStruct;
- bool m_recursiveStructHasBeenSet = false;
SimpleStruct m_simpleStruct;
- bool m_simpleStructHasBeenSet = false;
Aws::String m_string;
- bool m_stringHasBeenSet = false;
StructWithJsonName m_structWithJsonName;
- bool m_structWithJsonNameHasBeenSet = false;
Aws::Utils::DateTime m_timestamp{};
- bool m_timestampHasBeenSet = false;
Aws::Utils::DateTime m_unixTimestamp{};
- bool m_unixTimestampHasBeenSet = false;
Aws::String m_requestId;
+ bool m_blobHasBeenSet = false;
+ bool m_booleanHasBeenSet = false;
+ bool m_doubleHasBeenSet = false;
+ bool m_emptyStructHasBeenSet = false;
+ bool m_floatHasBeenSet = false;
+ bool m_httpdateTimestampHasBeenSet = false;
+ bool m_integerHasBeenSet = false;
+ bool m_iso8601TimestampHasBeenSet = false;
+ bool m_jsonValueHasBeenSet = false;
+ bool m_listOfListsHasBeenSet = false;
+ bool m_listOfMapsOfStringsHasBeenSet = false;
+ bool m_listOfStringsHasBeenSet = false;
+ bool m_listOfStructsHasBeenSet = false;
+ bool m_longHasBeenSet = false;
+ bool m_mapOfListsOfStringsHasBeenSet = false;
+ bool m_mapOfMapsHasBeenSet = false;
+ bool m_mapOfStringsHasBeenSet = false;
+ bool m_mapOfStructsHasBeenSet = false;
+ bool m_recursiveListHasBeenSet = false;
+ bool m_recursiveMapHasBeenSet = false;
+ bool m_recursiveStructHasBeenSet = false;
+ bool m_simpleStructHasBeenSet = false;
+ bool m_stringHasBeenSet = false;
+ bool m_structWithJsonNameHasBeenSet = false;
+ bool m_timestampHasBeenSet = false;
+ bool m_unixTimestampHasBeenSet = false;
bool m_requestIdHasBeenSet = false;
};
diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/KitchenSinkOperationResult.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/KitchenSinkOperationResult.h
index edc76931c602..d28ed84ed3ad 100644
--- a/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/KitchenSinkOperationResult.h
+++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-json-protocol/include/aws/json-protocol/model/KitchenSinkOperationResult.h
@@ -4,6 +4,7 @@
*/
#pragma once
+#include
#include
#include
#include
@@ -488,86 +489,89 @@ class KitchenSinkOperationResult {
return *this;
}
///@}
+ inline Aws::Http::HttpResponseCode GetHttpResponseCode() const { return m_HttpResponseCode; }
+
private:
Aws::Utils::ByteBuffer m_blob{};
- bool m_blobHasBeenSet = false;
bool m_boolean{false};
- bool m_booleanHasBeenSet = false;
double m_double{0.0};
- bool m_doubleHasBeenSet = false;
EmptyStruct m_emptyStruct;
- bool m_emptyStructHasBeenSet = false;
double m_float{0.0};
- bool m_floatHasBeenSet = false;
Aws::Utils::DateTime m_httpdateTimestamp{};
- bool m_httpdateTimestampHasBeenSet = false;
int m_integer{0};
- bool m_integerHasBeenSet = false;
Aws::Utils::DateTime m_iso8601Timestamp{};
- bool m_iso8601TimestampHasBeenSet = false;
Aws::String m_jsonValue;
- bool m_jsonValueHasBeenSet = false;
Aws::Vector> m_listOfLists;
- bool m_listOfListsHasBeenSet = false;
Aws::Vector