Skip to content

Commit e5211db

Browse files
committed
[cpp-rest-sdk] support exploded and deep object query parameters
1 parent cdd5f04 commit e5211db

2 files changed

Lines changed: 47 additions & 7 deletions

File tree

modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/api-source.mustache

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,17 +132,55 @@ pplx::task<{{{returnType}}}{{^returnType}}void{{/returnType}}> {{classname}}::{{
132132
{{/required}}
133133
{
134134
{{#isQueryParam}}
135+
{{#isDeepObject}}
136+
{{#isArray}}
137+
for (int i_key = 0; i_key < {{^required}}(*{{/required}}{{paramName}}{{^required}}){{/required}}->size(); i_key++) {
138+
localVarQueryParams[utility::conversions::to_string_t("{{baseName}}[" + std::to_string(i_key) + "]")] = ApiClient::parameterToString({{^required}}(*{{/required}}{{paramName}}{{^required}}){{/required}}[i_key]);
139+
}
140+
{{/isArray}}
141+
{{^isArray}}
142+
{{#isModel}}
143+
for (const auto& pair : {{^required}}(*{{/required}}{{paramName}}{{^required}}){{/required}}->toJson().as_object()) {
144+
localVarQueryParams[utility::conversions::to_string_t("{{baseName}}[" + pair.first + "]")] = ApiClient::parameterToString(pair.second.serialize());
145+
}
146+
{{/isModel}}
147+
{{^isModel}}
148+
localVarQueryParams[utility::conversions::to_string_t("{{baseName}}")] = ApiClient::parameterToString({{^required}}*{{/required}}{{paramName}});
149+
{{/isModel}}
150+
{{/isArray}}
151+
{{/isDeepObject}}
152+
{{^isDeepObject}}
153+
{{#isExplode}}
154+
{{#isArray}}
155+
for (const auto& item : {{^required}}(*{{/required}}{{paramName}}{{^required}}){{/required}}) {
156+
localVarQueryParams[utility::conversions::to_string_t("{{baseName}}")] = ApiClient::parameterToString(item);
157+
}
158+
{{/isArray}}
159+
{{^isArray}}
160+
{{#isModel}}
161+
for (const auto& pair : {{^required}}(*{{/required}}{{paramName}}{{^required}}){{/required}}->toJson().as_object()) {
162+
localVarQueryParams[utility::conversions::to_string_t(pair.first)] = ApiClient::parameterToString(pair.second.serialize());
163+
}
164+
{{/isModel}}
165+
{{^isModel}}
166+
localVarQueryParams[utility::conversions::to_string_t("{{baseName}}")] = ApiClient::parameterToString({{^required}}*{{/required}}{{paramName}});
167+
{{/isModel}}
168+
{{/isArray}}
169+
{{/isExplode}}
170+
{{^isExplode}}
135171
localVarQueryParams[utility::conversions::to_string_t("{{baseName}}")] = ApiClient::parameterToString({{^required}}*{{/required}}{{paramName}});
172+
{{/isExplode}}
173+
{{/isDeepObject}}
136174
{{/isQueryParam}}
137175
{{#isHeaderParam}}
138176
localVarHeaderParams[utility::conversions::to_string_t("{{baseName}}")] = ApiClient::parameterToString({{^required}}*{{/required}}{{paramName}});
139177
{{/isHeaderParam}}
140178
{{#isFormParam}}
141179
{{#isFile}}
142-
localVarFileParams[ utility::conversions::to_string_t("{{baseName}}") ] = {{^required}}*{{/required}}{{paramName}};
180+
localVarFileParams[utility::conversions::to_string_t("{{baseName}}")] = {{^required}}*{{/required}}{{paramName}};
143181
{{/isFile}}
144182
{{^isFile}}
145-
localVarFormParams[ utility::conversions::to_string_t("{{baseName}}") ] = ApiClient::parameterToString({{^required}}*{{/required}}{{paramName}});
183+
localVarFormParams[utility::conversions::to_string_t("{{baseName}}")] = ApiClient::parameterToString({{^required}}*{{/required}}{{paramName}});
146184
{{/isFile}}
147185
{{/isFormParam}}
148186
}

samples/client/petstore/cpp-restsdk/client/src/api/PetApi.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,9 @@ pplx::task<std::vector<std::shared_ptr<Pet>>> PetApi::petsPost(boost::optional<s
865865

866866
if (page && *page != nullptr)
867867
{
868-
localVarQueryParams[utility::conversions::to_string_t("page")] = ApiClient::parameterToString(*page);
868+
for (const auto& pair : (*page)->toJson().as_object()) {
869+
localVarQueryParams[utility::conversions::to_string_t(pair.first)] = ApiClient::parameterToString(pair.second.serialize());
870+
}
869871
}
870872

871873
std::shared_ptr<IHttpBody> localVarHttpBody;
@@ -1145,11 +1147,11 @@ pplx::task<void> PetApi::updatePetWithForm(int64_t petId, boost::optional<utilit
11451147

11461148
if (name)
11471149
{
1148-
localVarFormParams[ utility::conversions::to_string_t("name") ] = ApiClient::parameterToString(*name);
1150+
localVarFormParams[utility::conversions::to_string_t("name")] = ApiClient::parameterToString(*name);
11491151
}
11501152
if (status)
11511153
{
1152-
localVarFormParams[ utility::conversions::to_string_t("status") ] = ApiClient::parameterToString(*status);
1154+
localVarFormParams[utility::conversions::to_string_t("status")] = ApiClient::parameterToString(*status);
11531155
}
11541156

11551157
std::shared_ptr<IHttpBody> localVarHttpBody;
@@ -1261,11 +1263,11 @@ pplx::task<std::shared_ptr<ApiResponse>> PetApi::uploadFile(int64_t petId, boost
12611263

12621264
if (additionalMetadata)
12631265
{
1264-
localVarFormParams[ utility::conversions::to_string_t("additionalMetadata") ] = ApiClient::parameterToString(*additionalMetadata);
1266+
localVarFormParams[utility::conversions::to_string_t("additionalMetadata")] = ApiClient::parameterToString(*additionalMetadata);
12651267
}
12661268
if (file && *file != nullptr)
12671269
{
1268-
localVarFileParams[ utility::conversions::to_string_t("file") ] = *file;
1270+
localVarFileParams[utility::conversions::to_string_t("file")] = *file;
12691271
}
12701272

12711273
std::shared_ptr<IHttpBody> localVarHttpBody;

0 commit comments

Comments
 (0)