Skip to content

Commit 490377c

Browse files
authored
[C][Client] Support custom data type e.g.IntOrString (#11074)
1 parent 1e3dd1f commit 490377c

3 files changed

Lines changed: 64 additions & 1 deletion

File tree

modules/openapi-generator/src/main/resources/C-libcurl/model-body.mustache

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@ char* {{name}}{{classname}}_ToString({{projectName}}_{{classVarName}}_{{enumName
136136
{{datatype}}_t *{{name}}{{^-last}},{{/-last}}
137137
{{/isEnum}}
138138
{{/isModel}}
139+
{{^isModel}}
140+
{{^isFreeFormObject}}
141+
{{datatype}}_t *{{name}}{{^-last}},{{/-last}}
142+
{{/isFreeFormObject}}
143+
{{/isModel}}
139144
{{#isUuid}}
140145
{{datatype}} *{{name}}{{^-last}},{{/-last}}
141146
{{/isUuid}}
@@ -220,6 +225,14 @@ void {{classname}}_free({{classname}}_t *{{classname}}) {
220225
}
221226
{{/isEnum}}
222227
{{/isModel}}
228+
{{^isModel}}
229+
{{^isFreeFormObject}}
230+
if ({{{classname}}}->{{{name}}}) {
231+
{{{complexType}}}_free({{{classname}}}->{{{name}}});
232+
{{classname}}->{{name}} = NULL;
233+
}
234+
{{/isFreeFormObject}}
235+
{{/isModel}}
223236
{{#isUuid}}
224237
if ({{{classname}}}->{{{name}}}) {
225238
free({{{classname}}}->{{{name}}});
@@ -398,6 +411,18 @@ cJSON *{{classname}}_convertToJSON({{classname}}_t *{{classname}}) {
398411
}
399412
{{/isEnum}}
400413
{{/isModel}}
414+
{{^isModel}}
415+
{{^isFreeFormObject}}
416+
cJSON *{{{name}}}_local_JSON = {{complexType}}_convertToJSON({{{classname}}}->{{{name}}});
417+
if({{{name}}}_local_JSON == NULL) {
418+
goto fail; // custom
419+
}
420+
cJSON_AddItemToObject(item, "{{{baseName}}}", {{{name}}}_local_JSON);
421+
if(item->child == NULL) {
422+
goto fail;
423+
}
424+
{{/isFreeFormObject}}
425+
{{/isModel}}
401426
{{#isUuid}}
402427
if(cJSON_AddStringToObject(item, "{{{baseName}}}", {{{classname}}}->{{{name}}}) == NULL) {
403428
goto fail; //uuid
@@ -528,6 +553,7 @@ fail:
528553
{{classname}}_t *{{classname}}_local_var = NULL;
529554

530555
{{#vars}}
556+
{{^isContainer}}
531557
{{^isPrimitiveType}}
532558
{{#isModel}}
533559
{{^isEnum}}
@@ -536,7 +562,15 @@ fail:
536562

537563
{{/isEnum}}
538564
{{/isModel}}
565+
{{^isModel}}
566+
{{^isFreeFormObject}}
567+
// define the local variable for {{{classname}}}->{{{name}}}
568+
{{complexType}}_t *{{name}}_local_nonprim = NULL;
569+
570+
{{/isFreeFormObject}}
571+
{{/isModel}}
539572
{{/isPrimitiveType}}
573+
{{/isContainer}}
540574
{{/vars}}
541575
{{#vars}}
542576
// {{{classname}}}->{{{name}}}
@@ -629,6 +663,12 @@ fail:
629663
{{{name}}}_local_nonprim = {{complexType}}{{#isFreeFormObject}}object{{/isFreeFormObject}}_parseFromJSON({{{name}}}); //nonprimitive
630664
{{/isEnum}}
631665
{{/isModel}}
666+
{{^isModel}}
667+
{{^isFreeFormObject}}
668+
{{^required}}if ({{{name}}}) { {{/required}}
669+
{{{name}}}_local_nonprim = {{complexType}}_parseFromJSON({{{name}}}); //custom
670+
{{/isFreeFormObject}}
671+
{{/isModel}}
632672
{{#isUuid}}
633673
{{^required}}if ({{{name}}}) { {{/required}}
634674
if(!cJSON_IsString({{{name}}}))
@@ -779,6 +819,11 @@ fail:
779819
{{^required}}{{{name}}} ? {{/required}}{{{name}}}_local_nonprim{{^required}} : NULL{{/required}}{{^-last}},{{/-last}}
780820
{{/isEnum}}
781821
{{/isModel}}
822+
{{^isModel}}
823+
{{^isFreeFormObject}}
824+
{{^required}}{{{name}}} ? {{/required}}{{{name}}}_local_nonprim{{^required}} : NULL{{/required}}{{^-last}},{{/-last}}
825+
{{/isFreeFormObject}}
826+
{{/isModel}}
782827
{{#isUuid}}
783828
{{^required}}{{{name}}} ? {{/required}}strdup({{{name}}}->valuestring){{^required}} : NULL{{/required}}{{^-last}},{{/-last}}
784829
{{/isUuid}}
@@ -849,6 +894,14 @@ end:
849894
}
850895
{{/isEnum}}
851896
{{/isModel}}
897+
{{^isModel}}
898+
{{^isFreeFormObject}}
899+
if ({{{name}}}_local_nonprim) {
900+
{{complexType}}_free({{{name}}}_local_nonprim);
901+
{{{name}}}_local_nonprim = NULL;
902+
}
903+
{{/isFreeFormObject}}
904+
{{/isModel}}
852905
{{/isPrimitiveType}}
853906
{{/isContainer}}
854907
{{/vars}}

modules/openapi-generator/src/main/resources/C-libcurl/model-header.mustache

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ typedef struct {{classname}}_t {
8686
struct {{datatype}}_t *{{name}}; //model
8787
{{/isEnum}}
8888
{{/isModel}}
89+
{{^isModel}}
90+
{{^isFreeFormObject}}
91+
{{datatype}}_t *{{name}}; // custom
92+
{{/isFreeFormObject}}
93+
{{/isModel}}
8994
{{#isUuid}}
9095
{{datatype}} *{{name}}; // uuid
9196
{{/isUuid}}
@@ -156,6 +161,11 @@ typedef struct {{classname}}_t {
156161
{{datatype}}_t *{{name}}{{^-last}},{{/-last}}
157162
{{/isEnum}}
158163
{{/isModel}}
164+
{{^isModel}}
165+
{{^isFreeFormObject}}
166+
{{datatype}}_t *{{name}}{{^-last}},{{/-last}}
167+
{{/isFreeFormObject}}
168+
{{/isModel}}
159169
{{#isUuid}}
160170
{{datatype}} *{{name}}{{^-last}},{{/-last}}
161171
{{/isUuid}}

modules/openapi-generator/src/main/resources/C-libcurl/model_doc.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
Name | Type | Description | Notes
55
------------ | ------------- | ------------- | -------------
66
{{#vars}}
7-
**{{name}}** | {{^isContainer}}{{^isPrimitiveType}}{{#isModel}}{{#isEnum}}**{{projectName}}_{{classVarName}}_{{enumName}}_e**{{/isEnum}}{{^isEnum}}[**{{datatype}}_t**]({{complexType}}.md) \*{{/isEnum}}{{/isModel}}{{#isUuid}}**{{datatype}} \***{{/isUuid}}{{#isEmail}}**{{datatype}} \***{{/isEmail}}{{#isFreeFormObject}}[**{{datatype}}_t**]({{complexType}}.md) \*{{/isFreeFormObject}}{{/isPrimitiveType}}{{#isPrimitiveType}}{{#isNumeric}}**{{datatype}}**{{/isNumeric}}{{#isBoolean}}**{{datatype}}**{{/isBoolean}}{{#isEnum}}{{#isString}}**{{projectName}}_{{classVarName}}_{{enumName}}_e**{{/isString}}{{/isEnum}}{{^isEnum}}{{#isString}}**{{datatype}} \***{{/isString}}{{/isEnum}}{{#isByteArray}}**{{datatype}} \***{{/isByteArray}}{{#isBinary}}**{{datatype}}**{{/isBinary}}{{#isDate}}**{{datatype}} \***{{/isDate}}{{#isDateTime}}**{{datatype}} \***{{/isDateTime}}{{/isPrimitiveType}}{{/isContainer}}{{#isContainer}}{{#isArray}}{{#isPrimitiveType}}**{{datatype}}_t \***{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{datatype}}_t**]({{complexType}}.md) \*{{/isPrimitiveType}}{{/isArray}}{{#isMap}}**{{datatype}}**{{/isMap}}{{/isContainer}} | {{description}} | {{^required}}[optional] {{/required}}{{#isReadOnly}}[readonly] {{/isReadOnly}}{{#defaultValue}}[default to {{{.}}}]{{/defaultValue}}
7+
**{{name}}** | {{^isContainer}}{{^isPrimitiveType}}{{#isModel}}{{#isEnum}}**{{projectName}}_{{classVarName}}_{{enumName}}_e**{{/isEnum}}{{^isEnum}}[**{{datatype}}_t**]({{complexType}}.md) \*{{/isEnum}}{{/isModel}}{{^isModel}}{{^isFreeFormObject}}**{{datatype}}_t \***{{/isFreeFormObject}}{{/isModel}}{{#isUuid}}**{{datatype}} \***{{/isUuid}}{{#isEmail}}**{{datatype}} \***{{/isEmail}}{{#isFreeFormObject}}[**{{datatype}}_t**]({{complexType}}.md) \*{{/isFreeFormObject}}{{/isPrimitiveType}}{{#isPrimitiveType}}{{#isNumeric}}**{{datatype}}**{{/isNumeric}}{{#isBoolean}}**{{datatype}}**{{/isBoolean}}{{#isEnum}}{{#isString}}**{{projectName}}_{{classVarName}}_{{enumName}}_e**{{/isString}}{{/isEnum}}{{^isEnum}}{{#isString}}**{{datatype}} \***{{/isString}}{{/isEnum}}{{#isByteArray}}**{{datatype}} \***{{/isByteArray}}{{#isBinary}}**{{datatype}}**{{/isBinary}}{{#isDate}}**{{datatype}} \***{{/isDate}}{{#isDateTime}}**{{datatype}} \***{{/isDateTime}}{{/isPrimitiveType}}{{/isContainer}}{{#isContainer}}{{#isArray}}{{#isPrimitiveType}}**{{datatype}}_t \***{{/isPrimitiveType}}{{^isPrimitiveType}}[**{{datatype}}_t**]({{complexType}}.md) \*{{/isPrimitiveType}}{{/isArray}}{{#isMap}}**{{datatype}}**{{/isMap}}{{/isContainer}} | {{description}} | {{^required}}[optional] {{/required}}{{#isReadOnly}}[readonly] {{/isReadOnly}}{{#defaultValue}}[default to {{{.}}}]{{/defaultValue}}
88
{{/vars}}
99

1010
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

0 commit comments

Comments
 (0)