Skip to content

Commit 0183620

Browse files
authored
[cpprestsdk] Implement Enum inside Objects (#19919)
* Fix #19566 implemented the missing definition of declared methods inside openapi-generator/modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/modelbase-header.mustache, have also be added two missing body of methods definitions * Regenerated cpp-restsdk client samples * Fixed shared_ptr creation * [cpprestsdk] Implement enum inside objects
1 parent 4a6dbac commit 0183620

File tree

21 files changed

+755
-150
lines changed

21 files changed

+755
-150
lines changed

modules/openapi-generator/src/main/resources/cpp-rest-sdk-client/model-header.mustache

Lines changed: 47 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
#ifndef {{modelHeaderGuardPrefix}}_{{classname}}_H_
99
#define {{modelHeaderGuardPrefix}}_{{classname}}_H_
1010

11+
{{#hasEnums}}
12+
#include <stdexcept>
13+
{{/hasEnums}}
1114
{{#oneOf}}
1215
{{#-first}}
1316
#include <variant>
@@ -146,34 +149,64 @@ public:
146149
void toMultipart(std::shared_ptr<MultipartFormData> multipart, const utility::string_t& namePrefix) const override;
147150
bool fromMultiPart(std::shared_ptr<MultipartFormData> multipart, const utility::string_t& namePrefix) override;
148151

152+
149153
/////////////////////////////////////////////
150154
/// {{classname}} members
151155

152-
{{#vars}}
153-
{{^isInherited}}
156+
{{! ENUM DEFINITIONS }}
157+
{{#vars}}{{^isInherited}}{{#isEnum}}
158+
enum class {{#isContainer}}{{{enumName}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}{{/isContainer}}
159+
{
160+
{{#allowableValues}}{{#enumVars}}{{value}},
161+
{{/enumVars}}{{/allowableValues}}
162+
};
154163
/// <summary>
155164
/// {{description}}
156165
/// </summary>
157-
{{#isContainer}}{{{dataType}}}& {{getter}}();
158-
{{/isContainer}}{{^isContainer}}{{{dataType}}} {{getter}}() const;
159-
{{/isContainer}}bool {{nameInCamelCase}}IsSet() const;
166+
{{/isEnum}}{{/isInherited}}{{/vars}}{{#vars}}{{^isInherited}}{{#isEnum}}{{#isContainer}}
167+
{{! ENUM CONVERSIONS }}
168+
{{{enumName}}} to{{{enumName}}}(const utility::string_t& value) const;
169+
const utility::string_t from{{{enumName}}}(const {{{enumName}}} value) const;
170+
{{#isArray}}
171+
{{{datatypeWithEnum}}} to{{{enumName}}}(const {{{dataType}}}& value) const;
172+
{{{dataType}}} from{{{enumName}}}(const {{{datatypeWithEnum}}}& value) const;
173+
{{/isArray}}{{/isContainer}}{{^isContainer}}
174+
{{{datatypeWithEnum}}} to{{{datatypeWithEnum}}}(const utility::string_t& value) const;
175+
const utility::string_t from{{{datatypeWithEnum}}}(const {{{datatypeWithEnum}}} value) const;
176+
{{/isContainer}}{{/isEnum}}{{/isInherited}}{{/vars}}
177+
178+
{{! SETTER AND GETTERS }}
179+
{{#vars}}{{^isInherited}}
180+
/// <summary>
181+
/// {{description}}
182+
/// </summary>
183+
{{#isContainer}}{{^isEnum}}
184+
{{{dataType}}} {{getter}}() const;
185+
{{/isEnum}}{{/isContainer}}{{^isContainer}}{{^isEnum}}
186+
{{{dataType}}} {{getter}}() const;
187+
{{/isEnum}}{{/isContainer}}
188+
{{#isEnum}}{{^isMap}}
189+
{{{datatypeWithEnum}}} {{getter}}() const;
190+
{{/isMap}}{{#isMap}}
191+
{{{dataType}}} {{getter}}() const;
192+
{{/isMap}}{{/isEnum}}
193+
bool {{nameInCamelCase}}IsSet() const;
160194
void unset{{name}}();
161-
162195
{{#isPrimitiveType}}
163196
void {{setter}}({{{dataType}}} value);
164-
{{/isPrimitiveType}}
165-
{{^isPrimitiveType}}
197+
{{/isPrimitiveType}}{{^isPrimitiveType}}{{^isEnum}}
166198
void {{setter}}(const {{{dataType}}}& value);
167-
{{/isPrimitiveType}}
168-
169-
{{/isInherited}}
170-
{{/vars}}
199+
{{/isEnum}}{{/isPrimitiveType}}{{#isEnum}}
200+
void {{setter}}(const {{^isMap}}{{{datatypeWithEnum}}}{{/isMap}}{{#isMap}}{{{dataType}}}{{/isMap}} value);
201+
{{/isEnum}}{{/isInherited}}{{/vars}}
171202

172203
protected:
173204
{{#vars}}
174-
{{^isInherited}}
205+
{{^isInherited}}{{^isEnum}}
175206
{{{dataType}}} m_{{name}};
176-
bool m_{{name}}IsSet;
207+
{{/isEnum}}{{#isEnum}}
208+
{{^isMap}}{{{datatypeWithEnum}}}{{/isMap}}{{#isMap}}{{{dataType}}}{{/isMap}} m_{{name}};
209+
{{/isEnum}}bool m_{{name}}IsSet;
177210
{{/isInherited}}
178211
{{/vars}}
179212
};

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

Lines changed: 105 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -175,14 +175,14 @@ void {{classname}}::setValue({{classname}}::e{{classname}} const value)
175175
}
176176

177177
{{/isEnum}}
178-
179178
{{^isEnum}}
180179

181180
{{classname}}::{{classname}}()
182181
{
183182
{{#vars}}
184183
{{^isInherited}}
185184
{{^isContainer}}
185+
{{^isEnum}}
186186
{{#isPrimitiveType}}
187187
m_{{name}} = {{{defaultValue}}};
188188
{{/isPrimitiveType}}
@@ -194,6 +194,7 @@ void {{classname}}::setValue({{classname}}::e{{classname}} const value)
194194
m_{{name}} = {{{defaultValue}}};
195195
{{/isDateTime}}
196196
{{/isPrimitiveType}}
197+
{{/isEnum}}
197198
{{/isContainer}}
198199
m_{{name}}IsSet = false;
199200
{{/isInherited}}
@@ -212,15 +213,27 @@ void {{classname}}::validate()
212213
web::json::value {{classname}}::toJson() const
213214
{
214215
{{#parent}}
215-
web::json::value val = this->{{{.}}}::toJson();{{/parent}}
216+
web::json::value val = this->{{{.}}}::toJson();
217+
{{/parent}}
216218
{{^parent}}
217219
web::json::value val = web::json::value::object();
218220
{{/parent}}
219221
{{#vars}}{{^isInherited}}
220222
if(m_{{name}}IsSet)
221-
{
223+
{
224+
{{#isEnum}}{{#isContainer}}{{#isArray}}
225+
{{{dataType}}} refVal = from{{{enumName}}}(m_{{name}});
226+
{{/isArray}}{{#isMap}}
222227
val[utility::conversions::to_string_t(U("{{baseName}}"))] = ModelBase::toJson(m_{{name}});
223-
}{{/isInherited}}{{/vars}}
228+
{{/isMap}}{{/isContainer}}{{^isContainer}}
229+
utility::string_t refVal = from{{{datatypeWithEnum}}}(m_{{name}});
230+
{{/isContainer}}{{^isMap}}val[utility::conversions::to_string_t(U("{{baseName}}"))] = ModelBase::toJson(refVal);
231+
{{/isMap}}{{/isEnum}}
232+
{{^isEnum}}
233+
val[utility::conversions::to_string_t(U("{{baseName}}"))] = ModelBase::toJson(m_{{name}});
234+
{{/isEnum}}
235+
}
236+
{{/isInherited}}{{/vars}}
224237

225238
return val;
226239
}
@@ -239,7 +252,16 @@ bool {{classname}}::fromJson(const web::json::value& val)
239252
{
240253
{{{dataType}}} refVal_{{setter}};
241254
ok &= ModelBase::fromJson(fieldValue, refVal_{{setter}});
255+
{{^isEnum}}
256+
{{setter}}(refVal_{{setter}});
257+
{{/isEnum}}
258+
{{#isEnum}}{{#isContainer}}{{#isArray}}
259+
{{setter}}(to{{{enumName}}}(refVal_{{setter}}));
260+
{{/isArray}}{{#isMap}}
242261
{{setter}}(refVal_{{setter}});
262+
{{/isMap}}{{/isContainer}}{{^isContainer}}
263+
{{setter}}(to{{{datatypeWithEnum}}}(refVal_{{setter}}));
264+
{{/isContainer}}{{/isEnum}}
243265
}
244266
}{{/isInherited}}{{/vars}}
245267
return ok;
@@ -255,7 +277,16 @@ void {{classname}}::toMultipart(std::shared_ptr<MultipartFormData> multipart, co
255277
{{#vars}}
256278
if(m_{{name}}IsSet)
257279
{
280+
{{^isEnum}}
258281
multipart->add(ModelBase::toHttpContent(namePrefix + utility::conversions::to_string_t(U("{{baseName}}")), m_{{name}}));
282+
{{/isEnum}}
283+
{{#isEnum}}{{#isContainer}}{{#isArray}}
284+
multipart->add(ModelBase::toHttpContent(namePrefix + utility::conversions::to_string_t(U("{{baseName}}")), from{{{enumName}}}(m_{{name}})));
285+
{{/isArray}}{{#isMap}}
286+
multipart->add(ModelBase::toHttpContent(namePrefix + utility::conversions::to_string_t(U("{{baseName}}")), m_{{name}}));
287+
{{/isMap}}{{/isContainer}}{{^isContainer}}
288+
multipart->add(ModelBase::toHttpContent(namePrefix + utility::conversions::to_string_t(U("{{baseName}}")), from{{{datatypeWithEnum}}}(m_{{name}})));
289+
{{/isContainer}}{{/isEnum}}
259290
}
260291
{{/vars}}
261292
}
@@ -274,33 +305,93 @@ bool {{classname}}::fromMultiPart(std::shared_ptr<MultipartFormData> multipart,
274305
{
275306
{{{dataType}}} refVal_{{setter}};
276307
ok &= ModelBase::fromHttpContent(multipart->getContent(utility::conversions::to_string_t(U("{{baseName}}"))), refVal_{{setter}} );
308+
{{^isEnum}}
309+
{{setter}}(refVal_{{setter}});
310+
{{/isEnum}}
311+
{{#isEnum}}{{#isContainer}}{{#isArray}}
312+
{{setter}}(to{{{enumName}}}(refVal_{{setter}}));
313+
{{/isArray}}{{#isMap}}
277314
{{setter}}(refVal_{{setter}});
315+
{{/isMap}}{{/isContainer}}{{^isContainer}}
316+
{{setter}}(to{{{datatypeWithEnum}}}(refVal_{{setter}}));
317+
{{/isContainer}}{{/isEnum}}
278318
}
279319
{{/vars}}
280320
return ok;
281321
}
282322

283-
{{#vars}}
284-
{{^isInherited}}
323+
{{#vars}}{{^isInherited}}{{#isEnum}}{{#isContainer}}
324+
{{classname}}::{{{enumName}}} {{classname}}::to{{{enumName}}}(const utility::string_t& value) const
325+
{{/isContainer}}{{^isContainer}}
326+
{{classname}}::{{{datatypeWithEnum}}} {{classname}}::to{{{datatypeWithEnum}}}(const {{dataType}}& value) const
327+
{{/isContainer}}
328+
{
329+
{{#allowableValues}}{{#enumVars}}
330+
if (value == utility::conversions::to_string_t("{{value}}")) {
331+
return {{#isContainer}}{{{enumName}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}{{/isContainer}}::{{value}};
332+
}
333+
{{/enumVars}}{{/allowableValues}}
334+
throw std::invalid_argument("Invalid value for conversion to {{{datatypeWithEnum}}}");
335+
}
336+
285337
{{#isContainer}}
286-
{{{dataType}}}& {{classname}}::{{getter}}()
338+
const utility::string_t {{classname}}::from{{{enumName}}}(const {{{enumName}}} value) const
339+
{{/isContainer}}{{^isContainer}}
340+
const {{dataType}} {{classname}}::from{{{datatypeWithEnum}}}(const {{{datatypeWithEnum}}} value) const
341+
{{/isContainer}}
342+
{
343+
switch(value)
344+
{
345+
{{#allowableValues}}{{#enumVars}}
346+
case {{#isContainer}}{{{enumName}}}{{/isContainer}}{{^isContainer}}{{{datatypeWithEnum}}}{{/isContainer}}::{{value}}: return utility::conversions::to_string_t("{{value}}");
347+
{{/enumVars}}{{/allowableValues}}
348+
}
349+
}
350+
351+
{{#isContainer}}{{#isArray}}
352+
{{{dataType}}} {{{classname}}}::from{{{enumName}}}(const {{{datatypeWithEnum}}}& value) const
353+
{
354+
{{{dataType}}} ret;
355+
for (auto it = value.begin(); it != value.end(); it++) {
356+
ret.push_back(from{{{enumName}}}(*it));
357+
}
358+
return ret;
359+
}
360+
361+
{{{baseType}}}<{{classname}}::{{{enumName}}}> {{{classname}}}::to{{{enumName}}}(const {{{dataType}}}& value) const
362+
{
363+
{{{datatypeWithEnum}}} ret;
364+
for (auto it = value.begin(); it != value.end(); it++) {
365+
ret.push_back(to{{{enumName}}}(*it));
366+
}
367+
return ret;
368+
}
369+
{{/isArray}}{{/isContainer}}{{/isEnum}}{{/isInherited}}{{/vars}}
370+
371+
{{#vars}}{{^isInherited}}{{#isContainer}}{{^isEnum}}
372+
{{{dataType}}} {{classname}}::{{getter}}() const
287373
{
288374
return m_{{name}};
289375
}
290-
{{/isContainer}}
291-
{{^isContainer}}
376+
{{/isEnum}}{{/isContainer}}{{^isContainer}}{{^isEnum}}
292377
{{{dataType}}} {{classname}}::{{getter}}() const
293378
{
294379
return m_{{name}};
295380
}
296-
{{/isContainer}}
381+
{{/isEnum}}{{/isContainer}}{{#isEnum}}
382+
{{^isMap}}{{#isArray}}{{{baseType}}}<{{/isArray}}{{{classname}}}::{{{enumName}}}{{#isArray}}>{{/isArray}}{{/isMap}}{{#isMap}}{{{dataType}}}{{/isMap}} {{classname}}::{{getter}}() const
383+
{
384+
return m_{{name}};
385+
}
386+
{{/isEnum}}
297387

298388
{{#isPrimitiveType}}
299389
void {{classname}}::{{setter}}({{{dataType}}} value)
300-
{{/isPrimitiveType}}
301-
{{^isPrimitiveType}}
390+
{{/isPrimitiveType}}{{^isPrimitiveType}}{{^isEnum}}
302391
void {{classname}}::{{setter}}(const {{{dataType}}}& value)
303-
{{/isPrimitiveType}}
392+
{{/isEnum}}{{/isPrimitiveType}}{{#isEnum}}
393+
void {{classname}}::{{setter}}(const {{^isMap}}{{{datatypeWithEnum}}}{{/isMap}}{{#isMap}}{{{dataType}}}{{/isMap}} value)
394+
{{/isEnum}}
304395
{
305396
m_{{name}} = value;
306397
m_{{name}}IsSet = true;
@@ -315,8 +406,7 @@ void {{classname}}::unset{{name}}()
315406
{
316407
m_{{name}}IsSet = false;
317408
}
318-
{{/isInherited}}
319-
{{/vars}}
409+
{{/isInherited}}{{/vars}}
320410
{{/isEnum}}
321411
{{/oneOf}}
322412
{{#modelNamespaceDeclarations}}

samples/client/petstore/cpp-restsdk/client/include/CppRestPetstoreClient/model/ApiResponse.h

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,42 +51,57 @@ class ApiResponse
5151
void toMultipart(std::shared_ptr<MultipartFormData> multipart, const utility::string_t& namePrefix) const override;
5252
bool fromMultiPart(std::shared_ptr<MultipartFormData> multipart, const utility::string_t& namePrefix) override;
5353

54+
5455
/////////////////////////////////////////////
5556
/// ApiResponse members
5657

58+
59+
60+
5761
/// <summary>
5862
///
5963
/// </summary>
64+
6065
int32_t getCode() const;
66+
67+
6168
bool codeIsSet() const;
6269
void unsetCode();
63-
6470
void setCode(int32_t value);
65-
71+
6672
/// <summary>
6773
///
6874
/// </summary>
75+
6976
utility::string_t getType() const;
77+
78+
7079
bool typeIsSet() const;
7180
void unsetType();
7281

7382
void setType(const utility::string_t& value);
74-
83+
7584
/// <summary>
7685
///
7786
/// </summary>
87+
7888
utility::string_t getMessage() const;
89+
90+
7991
bool messageIsSet() const;
8092
void unsetMessage();
8193

8294
void setMessage(const utility::string_t& value);
83-
95+
8496

8597
protected:
98+
8699
int32_t m_Code;
87100
bool m_CodeIsSet;
101+
88102
utility::string_t m_Type;
89103
bool m_TypeIsSet;
104+
90105
utility::string_t m_Message;
91106
bool m_MessageIsSet;
92107
};

samples/client/petstore/cpp-restsdk/client/include/CppRestPetstoreClient/model/Category.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,31 +51,42 @@ class Category
5151
void toMultipart(std::shared_ptr<MultipartFormData> multipart, const utility::string_t& namePrefix) const override;
5252
bool fromMultiPart(std::shared_ptr<MultipartFormData> multipart, const utility::string_t& namePrefix) override;
5353

54+
5455
/////////////////////////////////////////////
5556
/// Category members
5657

58+
59+
60+
5761
/// <summary>
5862
///
5963
/// </summary>
64+
6065
int64_t getId() const;
66+
67+
6168
bool idIsSet() const;
6269
void unsetId();
63-
6470
void setId(int64_t value);
65-
71+
6672
/// <summary>
6773
///
6874
/// </summary>
75+
6976
utility::string_t getName() const;
77+
78+
7079
bool nameIsSet() const;
7180
void unsetName();
7281

7382
void setName(const utility::string_t& value);
74-
83+
7584

7685
protected:
86+
7787
int64_t m_Id;
7888
bool m_IdIsSet;
89+
7990
utility::string_t m_Name;
8091
bool m_NameIsSet;
8192
};

0 commit comments

Comments
 (0)