Skip to content

Commit e143214

Browse files
authored
[cpp pistache] fix leading number in model names and apply modelNamePrefix in all cases (#730)
* Fix numbers in nameInCamelCase. Add possibility to prefix Names to avoid conflicts * Allow unique prefixing for template functions as well
1 parent 2340d83 commit e143214

7 files changed

Lines changed: 57 additions & 37 deletions

File tree

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCppCodegen.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ public String toVarName(String name) {
168168
return sanitizeName(name);
169169
}
170170

171-
if (isReservedWord(name)) {
171+
if (isReservedWord(name) || name.matches("^\\d.*")) {
172172
return escapeReservedWord(name);
173173
}
174174

@@ -205,6 +205,10 @@ public String toOperationId(String operationId) {
205205

206206
@Override
207207
public String toParamName(String name) {
208+
if (isReservedWord(name) || name.matches("^\\d.*")) {
209+
return escapeReservedWord(name);
210+
}
211+
208212
return sanitizeName(super.toParamName(name));
209213
}
210214

@@ -217,6 +221,9 @@ public CodegenProperty fromProperty(String name, Schema p) {
217221
} else {
218222
nameInCamelCase = sanitizeName(nameInCamelCase);
219223
}
224+
if (isReservedWord(nameInCamelCase) || nameInCamelCase.matches("^\\d.*")) {
225+
nameInCamelCase = escapeReservedWord(nameInCamelCase);
226+
}
220227
property.nameInCamelCase = nameInCamelCase;
221228
return property;
222229
}

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CppPistacheServerCodegen.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ public class CppPistacheServerCodegen extends AbstractCppCodegen {
4646
protected boolean isAddExternalLibs = true;
4747
public static final String OPTIONAL_EXTERNAL_LIB = "addExternalLibs";
4848
public static final String OPTIONAL_EXTERNAL_LIB_DESC = "Add the Possibility to fetch and compile external Libraries needed by this Framework.";
49+
protected final String PREFIX = "";
50+
4951
@Override
5052
public CodegenType getTag() {
5153
return CodegenType.SERVER;
@@ -63,6 +65,9 @@ public String getHelp() {
6365

6466
public CppPistacheServerCodegen() {
6567
super();
68+
if (StringUtils.isEmpty(modelNamePrefix)) {
69+
modelNamePrefix = PREFIX;
70+
}
6671

6772
apiPackage = "org.openapitools.server.api";
6873
modelPackage = "org.openapitools.server.model";
@@ -83,8 +88,8 @@ public CppPistacheServerCodegen() {
8388

8489
reservedWords = new HashSet<>();
8590

86-
supportingFiles.add(new SupportingFile("modelbase-header.mustache", "model", "ModelBase.h"));
87-
supportingFiles.add(new SupportingFile("modelbase-source.mustache", "model", "ModelBase.cpp"));
91+
supportingFiles.add(new SupportingFile("modelbase-header.mustache", "model", modelNamePrefix + "ModelBase.h"));
92+
supportingFiles.add(new SupportingFile("modelbase-source.mustache", "model", modelNamePrefix + "ModelBase.cpp"));
8893
supportingFiles.add(new SupportingFile("cmake.mustache", "", "CMakeLists.txt"));
8994
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
9095

@@ -117,7 +122,14 @@ public CppPistacheServerCodegen() {
117122
@Override
118123
public void processOpts() {
119124
super.processOpts();
120-
125+
if (additionalProperties.containsKey("modelNamePrefix")) {
126+
additionalProperties().put("prefix", modelNamePrefix);
127+
supportingFiles.clear();
128+
supportingFiles.add(new SupportingFile("modelbase-header.mustache", "model", modelNamePrefix + "ModelBase.h"));
129+
supportingFiles.add(new SupportingFile("modelbase-source.mustache", "model", modelNamePrefix + "ModelBase.cpp"));
130+
supportingFiles.add(new SupportingFile("cmake.mustache", "", "CMakeLists.txt"));
131+
supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
132+
}
121133
additionalProperties.put("modelNamespaceDeclarations", modelPackage.split("\\."));
122134
additionalProperties.put("modelNamespace", modelPackage.replaceAll("\\.", "::"));
123135
additionalProperties.put("apiNamespaceDeclarations", apiPackage.split("\\."));
@@ -138,6 +150,7 @@ public String toModelImport(String name) {
138150
}
139151
}
140152

153+
141154
@Override
142155
public CodegenModel fromModel(String name, Schema model, Map<String, Schema> allDefinitions) {
143156
CodegenModel codegenModel = super.fromModel(name, model, allDefinitions);
@@ -240,7 +253,7 @@ public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> o
240253

241254
@Override
242255
public String toModelFilename(String name) {
243-
return initialCaps(name);
256+
return initialCaps(toModelName(name));
244257
}
245258

246259
@Override
@@ -265,7 +278,7 @@ public String apiFilename(String templateName, String tag) {
265278

266279
@Override
267280
public String toApiFilename(String name) {
268-
return initialCaps(name) + "Api";
281+
return modelNamePrefix + initialCaps(name) + "Api";
269282
}
270283

271284
/**

modules/openapi-generator/src/main/resources/cpp-pistache-server/api-source.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ void {{classname}}::{{operationIdSnakeCase}}_handler(const Pistache::Rest::Reque
7676
nlohmann::json request_body = nlohmann::json::parse(request.body());
7777
{{^isPrimitiveType}}{{^isContainer}}
7878
{{paramName}}.fromJson(request_body);
79-
{{/isContainer}}{{/isPrimitiveType}}{{#isContainer}} {{paramName}} = {{#isListContainer}} ModelArrayHelper{{/isListContainer}}{{#isMapContainer}} ModelMapHelper{{/isMapContainer}}::fromJson<{{items.baseType}}>(request_body);{{/isContainer}}
79+
{{/isContainer}}{{/isPrimitiveType}}{{#isContainer}} {{paramName}} = {{#isListContainer}} {{prefix}}ModelArrayHelper{{/isListContainer}}{{#isMapContainer}} {{prefix}}ModelMapHelper{{/isMapContainer}}::fromJson<{{items.baseType}}>(request_body);{{/isContainer}}
8080
{{#isPrimitiveType}}
8181
// The conversion is done automatically by the json library
8282
{{paramName}} = request_body;

modules/openapi-generator/src/main/resources/cpp-pistache-server/model-header.mustache

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#define {{classname}}_H_
1010

1111
{{{defaultInclude}}}
12-
#include "ModelBase.h"
12+
#include "{{prefix}}ModelBase.h"
1313

1414
{{#imports}}{{{this}}}
1515
{{/imports}}
@@ -22,14 +22,14 @@ namespace {{this}} {
2222
/// {{description}}
2323
/// </summary>
2424
class {{declspec}} {{classname}}
25-
: public ModelBase
25+
: public {{prefix}}ModelBase
2626
{
2727
public:
2828
{{classname}}();
2929
virtual ~{{classname}}();
3030

3131
/////////////////////////////////////////////
32-
/// ModelBase overrides
32+
/// {{prefix}}ModelBase overrides
3333

3434
void validate() override;
3535

modules/openapi-generator/src/main/resources/cpp-pistache-server/model-source.mustache

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ nlohmann::json {{classname}}::toJson() const
3838
nlohmann::json jsonArray;
3939
for( auto& item : m_{{name}} )
4040
{
41-
jsonArray.push_back(ModelBase::toJson(item));
41+
jsonArray.push_back({{prefix}}ModelBase::toJson(item));
4242
}
4343
{{#required}}val["{{baseName}}"] = jsonArray;
4444
{{/required}}{{^required}}
@@ -50,9 +50,9 @@ nlohmann::json {{classname}}::toJson() const
5050
}
5151
{{/isListContainer}}{{^isListContainer}}{{^isPrimitiveType}}{{^required}}if(m_{{name}}IsSet)
5252
{
53-
val["{{baseName}}"] = ModelBase::toJson(m_{{name}});
53+
val["{{baseName}}"] = {{prefix}}ModelBase::toJson(m_{{name}});
5454
}
55-
{{/required}}{{#required}}val["{{baseName}}"] = ModelBase::toJson(m_{{name}});
55+
{{/required}}{{#required}}val["{{baseName}}"] = {{prefix}}ModelBase::toJson(m_{{name}});
5656
{{/required}}{{/isPrimitiveType}}{{/isListContainer}}{{/vars}}
5757

5858
return val;

modules/openapi-generator/src/main/resources/cpp-pistache-server/modelbase-header.mustache

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{{>licenseInfo}}
22
/*
3-
* ModelBase.h
3+
* {{prefix}}ModelBase.h
44
*
55
* This is the base class for all model classes
66
*/
77

8-
#ifndef ModelBase_H_
9-
#define ModelBase_H_
8+
#ifndef {{prefix}}ModelBase_H_
9+
#define {{prefix}}ModelBase_H_
1010

1111
{{{defaultInclude}}}
1212
#include "json.hpp"
@@ -19,11 +19,11 @@
1919
namespace {{this}} {
2020
{{/modelNamespaceDeclarations}}
2121

22-
class {{declspec}} ModelBase
22+
class {{declspec}} {{prefix}}ModelBase
2323
{
2424
public:
25-
ModelBase();
26-
virtual ~ModelBase();
25+
{{prefix}}ModelBase();
26+
virtual ~{{prefix}}ModelBase();
2727

2828
virtual void validate() = 0;
2929

@@ -36,16 +36,16 @@ public:
3636
static int64_t toJson( int64_t const value );
3737
static double toJson( double const value );
3838
static bool toJson( bool const value );
39-
static nlohmann::json toJson(ModelBase const& content );
39+
static nlohmann::json toJson({{prefix}}ModelBase const& content );
4040
};
4141

42-
class ModelArrayHelper {
42+
class {{prefix}}ModelArrayHelper {
4343
public:
4444
template<typename T>
4545
static std::vector<T> fromJson(nlohmann::json& json) {
4646
T *ptrTest;
4747
std::vector<T> val;
48-
if (dynamic_cast<ModelBase*>(ptrTest) != nullptr) {
48+
if (dynamic_cast<{{prefix}}ModelBase*>(ptrTest) != nullptr) {
4949
if (!json.empty()) {
5050
for (auto &item : json.items()) {
5151
T entry;
@@ -66,7 +66,7 @@ public:
6666
}
6767
};
6868

69-
class ArrayHelper {
69+
class {{prefix}}ArrayHelper {
7070
public:
7171
template<typename T>
7272
static std::vector<T> fromJson(nlohmann::json& json) {
@@ -82,13 +82,13 @@ public:
8282
}
8383
};
8484

85-
class ModelMapHelper {
85+
class {{prefix}}ModelMapHelper {
8686
public:
8787
template<typename T>
8888
static std::map<std::string, T> & fromJson(nlohmann::json& json) {
8989
T *ptrTest;
9090
std::map<std::string, T> val;
91-
if (dynamic_cast<ModelBase*>(ptrTest) != nullptr) {
91+
if (dynamic_cast<{{prefix}}ModelBase*>(ptrTest) != nullptr) {
9292
if (!json.empty()) {
9393
for (auto &item : json.items()) {
9494
T entry;
@@ -110,7 +110,7 @@ public:
110110
}
111111
};
112112

113-
class MapHelper {
113+
class {{prefix}}MapHelper {
114114
public:
115115
template<typename T>
116116
static std::map<std::string, T> & fromJson(nlohmann::json& json) {
@@ -139,4 +139,4 @@ public:
139139
}
140140
{{/modelNamespaceDeclarations}}
141141

142-
#endif /* ModelBase_H_ */
142+
#endif /* {{prefix}}ModelBase_H_ */

modules/openapi-generator/src/main/resources/cpp-pistache-server/modelbase-source.mustache

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,50 @@
11
{{>licenseInfo}}
2-
#include "ModelBase.h"
2+
#include "{{prefix}}ModelBase.h"
33

44
{{#modelNamespaceDeclarations}}
55
namespace {{this}} {
66
{{/modelNamespaceDeclarations}}
77

8-
ModelBase::ModelBase()
8+
{{prefix}}ModelBase::{{prefix}}ModelBase()
99
{
1010
}
11-
ModelBase::~ModelBase()
11+
{{prefix}}ModelBase::~{{prefix}}ModelBase()
1212
{
1313
}
1414

15-
std::string ModelBase::toJson( std::string const& value )
15+
std::string {{prefix}}ModelBase::toJson( std::string const& value )
1616
{
1717
return value;
1818
}
1919

20-
std::string ModelBase::toJson( std::time_t const& value )
20+
std::string {{prefix}}ModelBase::toJson( std::time_t const& value )
2121
{
2222
char buf[sizeof "2011-10-08T07:07:09Z"];
2323
strftime(buf, sizeof buf, "%FT%TZ", gmtime(&value));
2424
return buf;
2525
}
2626

27-
int32_t ModelBase::toJson( int32_t const value )
27+
int32_t {{prefix}}ModelBase::toJson( int32_t const value )
2828
{
2929
return value;
3030
}
3131

32-
int64_t ModelBase::toJson( int64_t const value )
32+
int64_t {{prefix}}ModelBase::toJson( int64_t const value )
3333
{
3434
return value;
3535
}
3636

37-
double ModelBase::toJson( double const value )
37+
double {{prefix}}ModelBase::toJson( double const value )
3838
{
3939
return value;
4040
}
4141

42-
bool ModelBase::toJson( bool const value )
42+
bool {{prefix}}ModelBase::toJson( bool const value )
4343
{
4444
return value;
4545
}
4646

47-
nlohmann::json ModelBase::toJson(ModelBase const& content )
47+
nlohmann::json {{prefix}}ModelBase::toJson({{prefix}}ModelBase const& content )
4848
{
4949
return content.toJson();
5050
}

0 commit comments

Comments
 (0)