From 632b46a825f442a6c451475d3b77861acc417edd Mon Sep 17 00:00:00 2001 From: Sohaib Athar Date: Tue, 2 Sep 2025 05:28:29 +0500 Subject: [PATCH] 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. --- .../resources/cpp-qt-client/api-body.mustache | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/modules/openapi-generator/src/main/resources/cpp-qt-client/api-body.mustache b/modules/openapi-generator/src/main/resources/cpp-qt-client/api-body.mustache index 73b525dcc94c..2a51b5f1d87a 100644 --- a/modules/openapi-generator/src/main/resources/cpp-qt-client/api-body.mustache +++ b/modules/openapi-generator/src/main/resources/cpp-qt-client/api-body.mustache @@ -344,6 +344,21 @@ void {{classname}}::{{nickname}}({{#allParams}}{{#required}}const {{{dataType}}} else fullPath.append("?"); {{^isPrimitiveType}} + {{#isEnum}} + // For enum parameters, use direct string serialization instead of object iteration + QString enumValue = {{paramName}}{{^required}}.value(){{/required}}.asJson(); + if (!enumValue.isEmpty()) { + fullPath.append(QUrl::toPercentEncoding("{{baseName}}")).append("=").append(QUrl::toPercentEncoding(enumValue)); + } + {{/isEnum}} + {{#isEnumRef}} + // For enum reference parameters, use direct string serialization instead of object iteration + QString enumValue = {{paramName}}{{^required}}.value(){{/required}}.asJson(); + if (!enumValue.isEmpty()) { + fullPath.append(QUrl::toPercentEncoding("{{baseName}}")).append("=").append(QUrl::toPercentEncoding(enumValue)); + } + {{/isEnumRef}} + {{^isEnum}}{{^isEnumRef}} QString paramString = (queryStyle == "form" && {{isExplode}}) ? "" : (queryStyle == "form" && !({{isExplode}})) ? "{{baseName}}"+querySuffix : ""; QJsonObject parameter = {{paramName}}{{^required}}.value(){{/required}}.asJsonObject(); qint32 count = 0; @@ -390,6 +405,7 @@ void {{classname}}::{{nickname}}({{#allParams}}{{#required}}const {{{dataType}}} count++; } fullPath.append(paramString); + {{/isEnumRef}}{{/isEnum}} {{/isPrimitiveType}}{{#isPrimitiveType}} fullPath.append(QUrl::toPercentEncoding("{{baseName}}")).append(querySuffix).append(QUrl::toPercentEncoding(::{{cppNamespace}}::toStringValue({{paramName}}{{^required}}.stringValue(){{/required}}))); {{/isPrimitiveType}}