Skip to content

Commit 632b46a

Browse files
committed
fix(cpp-qt): Fix enum query parameter serialization for both inline and referenced enums
For enum query parameters, the template was incorrectly using asJsonObject() which returns {"value": "enumValue"} and then iterating over keys, using "value" as the parameter name instead of the actual parameter name. This fix adds special handling for both inline enums (isEnum) and referenced enums (isEnumRef) to use asJson() directly, which returns the correct enum string value for URL serialization. Fixes enum query parameters like ?scope=property instead of ?value=property. Completes the fix started in PR #21211 which added the asJsonObject() method to make enum code compile, but the template logic was still incorrect for URL query parameter serialization. Note: The petstore samples don't contain enum query parameter tests to demonstrate this fix (they use string arrays). Future contributors may want to add enum query parameter examples to better showcase this functionality.
1 parent 1c2fd67 commit 632b46a

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

modules/openapi-generator/src/main/resources/cpp-qt-client/api-body.mustache

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,21 @@ void {{classname}}::{{nickname}}({{#allParams}}{{#required}}const {{{dataType}}}
344344
else
345345
fullPath.append("?");
346346
{{^isPrimitiveType}}
347+
{{#isEnum}}
348+
// For enum parameters, use direct string serialization instead of object iteration
349+
QString enumValue = {{paramName}}{{^required}}.value(){{/required}}.asJson();
350+
if (!enumValue.isEmpty()) {
351+
fullPath.append(QUrl::toPercentEncoding("{{baseName}}")).append("=").append(QUrl::toPercentEncoding(enumValue));
352+
}
353+
{{/isEnum}}
354+
{{#isEnumRef}}
355+
// For enum reference parameters, use direct string serialization instead of object iteration
356+
QString enumValue = {{paramName}}{{^required}}.value(){{/required}}.asJson();
357+
if (!enumValue.isEmpty()) {
358+
fullPath.append(QUrl::toPercentEncoding("{{baseName}}")).append("=").append(QUrl::toPercentEncoding(enumValue));
359+
}
360+
{{/isEnumRef}}
361+
{{^isEnum}}{{^isEnumRef}}
347362
QString paramString = (queryStyle == "form" && {{isExplode}}) ? "" : (queryStyle == "form" && !({{isExplode}})) ? "{{baseName}}"+querySuffix : "";
348363
QJsonObject parameter = {{paramName}}{{^required}}.value(){{/required}}.asJsonObject();
349364
qint32 count = 0;
@@ -390,6 +405,7 @@ void {{classname}}::{{nickname}}({{#allParams}}{{#required}}const {{{dataType}}}
390405
count++;
391406
}
392407
fullPath.append(paramString);
408+
{{/isEnumRef}}{{/isEnum}}
393409
{{/isPrimitiveType}}{{#isPrimitiveType}}
394410
fullPath.append(QUrl::toPercentEncoding("{{baseName}}")).append(querySuffix).append(QUrl::toPercentEncoding(::{{cppNamespace}}::toStringValue({{paramName}}{{^required}}.stringValue(){{/required}})));
395411
{{/isPrimitiveType}}

0 commit comments

Comments
 (0)