forked from loafle/openapi-generator-original
* add c generator (1st commit) * udpate c model template * more fixes * Add string replace function for C generator (#908) * Add string replace function for C generator * Fixed replacement for variable only * Fixed problem for different datatypes of paramName * store return value of modified path * set str_replace variable to be same as original variable. * [C] Fixed coding style issues * add uncrustify support * update petstore sampmles * add Locale.ROOT * added test-api-client.c to include test cases for strReplace function * added header and body mustache and made changes to ClibcurlClientCodegen.java accordingly * [C] renamed functions in apiKey.c.mustache according to apiKey.h.mustache * [C] changes in import statement * renamed apiKey.h to keyValuePair.h and made necessary changes in the codes * changed apiKey.c according to keyValuePair.h * fixed import statement in model * added code for generating struct in model-header.mustache * added typedef struct for model-headers * updated sample/client/petstore/C * fix locale * [C] Function addition and modification of major structs (#1020) * added readme file * fixed parameters in api headers functions * made changes to add readme file and typemapping of array to list * fixed header import statement in apiheader files * modified struct of model type in model header * updated sample * modified README file * updated sample * parse from json function added * modified struct and create function * added include for model * modified parsefromjson function * modified struct and create function for more datatypes * added mapping for date-time and modified model import return statement * modified function parameters * modified include statement * fix function in api body * updated sample * clean up files * regenerate c petstore * fix error message when setting uncrustify * add version to uncrustify usage * added uncrustify rules in mustache (#1021) * added uncrustify rules in mustache * updated sample * updated same with crustify * updated sample with uncrusitfy 0.67 * modified readme about uncrustify requirements * fixed mistakes in readme mustache and sample readme * fix file import, unformat c petstore * fix import in test files * fix model with complexType * fix free string, format the code using uncrustify * modified sample * Modified sample to check * return type issue figured,more to do to fix it * minor fixes to make complete code compile * Compiling sample code. Store has issue with map. * comment out test file generation which is not req. * commented operation name * fixed various issues responsible for code not compiling * test mustache temporary for testing * updated sample add,del,getbyid works, formparam yet to do * few minor changes and added fuction to add different header and content type in apiClient * added code to upload image * added function to test upload image * fixes for fileupload and various other small things * fixed issue due to xml produces * updated sample:working sample add,del,find,uploading:tocheck , * added free functions for variable where memory is allocated * rename imagecontainer struct to filestruct * fix issues with if functions for all list types * fixed issue with primitive return type in header file * updated sample w/ free functions * update c samples * remove corrupted file * update samples * test cases for APIs * added function to generate test cases from new mustache * mustache files for manual written test cases * added default content type to application/json * fixed issue with primitive return type * fixed issue with bool type * added file apiKey.c * updated sample tested * update c environment variable (#1090) * add mapping for map (#1103) * minor update * revert list paramter check to NULL * modified return type for primitive(map - list_t)in mustache * removed apiClient_free as it was two times * updated sample * fixed issue of path parameter when string less than parameter len * fixed issue for form paramters upload * added checks to avoid seg faults * updated sample * added check for null value in form parameter * modified size of mallocs to dynamic * updated sample * Add C Petstore to Travis CI (#1136) * setup CI for C petstore * update bash script permission * unit petapi test * fixed memory leak in strReplace and apiClient Functions * modified return value for status generation * added enum defination and functions to convert and back from string * added function for enum and made changes to free memory at necessary places * added datatype handling for enum * fixes regarding memory allocation and free * updated mustache of test files * updated sample * renamed manually written test files * manual test file for pet * cleaned common api test file for time being * renamed test files * added renamed test files to build test bash * added file null pointer check * modified uncrusitfy rules * minor update to c templates (#1161) * [C] Fixed enum function declaration (#1178) * fixed enum function declaration in model headers * fixed enum declaration in header files for sample * disable curl verbose mode and add response code variable * added response code variable in apiClient struct * modified apiClient header and source file * added response and removed commented code api-body mustache * removed commented code from model-body mustache * removed unnecessary print statements from test mustache * updated sample * fixed spaces issue * Better format in C templates (#1224) * better format in the c template * minor format fix * [C] changed base url from static to dynamic (#1225) * changed basePath from static to dynamic * removed unnecessary header declaration * updated sample * [C] added curl version check in CMakeList.txt (#1248) * added curl version check in CMakeList.txt * Updated README for latest curl version * [C] Major changes to keyValuePair function (#1282) * removed static declaration * changed static declaration * added difference for string and non string * added more code for different function for string and non string * fix issue with param name * change value in keyPairValue to void * fixed issue of difference in function name cases * added support for non char parameters in api * fix issue of map return data * modified manual-StoreAPI map return data handling * fix minor mistake * added support for map and changed code to support value of keyvaluepair as char and other * updated sample * fixed api header declarations * change map declaration in header * resolved issues realted to map data handling * fix minor issues * add N at start if enum variable starts with number * override toParamName method * changed paramters to paramName from baseName * change variables in apibody from baseName to paramName * Skip test file generation (#1459) * skip test file generation * skip overwriting CMakeLists.txt
230 lines
5.1 KiB
C
230 lines
5.1 KiB
C
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <stdio.h>
|
|
#include "cJSON.h"
|
|
#include "list.h"
|
|
#include "keyValuePair.h"
|
|
#include "pet.h"
|
|
#include "category.h"
|
|
#include "list.h"
|
|
#include "tag.h"
|
|
|
|
char *statuspet_ToString(status_e status) {
|
|
char *statusArray[] = { "available", "pending", "sold" };
|
|
return statusArray[status];
|
|
}
|
|
|
|
status_e statuspet_FromString(char *status) {
|
|
int stringToReturn = 0;
|
|
char *statusArray[] = { "available", "pending", "sold" };
|
|
size_t sizeofArray = sizeof(statusArray) / sizeof(statusArray[0]);
|
|
while(stringToReturn < sizeofArray) {
|
|
if(strcmp(status, statusArray[stringToReturn]) == 0) {
|
|
return stringToReturn;
|
|
}
|
|
stringToReturn++;
|
|
}
|
|
}
|
|
|
|
pet_t *pet_create(long id, category_t *category, char *name, list_t *photoUrls,
|
|
list_t *tags, status_e status) {
|
|
pet_t *pet = malloc(sizeof(pet_t));
|
|
pet->id = id;
|
|
pet->category = category;
|
|
pet->name = name;
|
|
pet->photoUrls = photoUrls;
|
|
pet->tags = tags;
|
|
pet->status = status;
|
|
|
|
return pet;
|
|
}
|
|
|
|
|
|
void pet_free(pet_t *pet) {
|
|
listEntry_t *listEntry;
|
|
category_free(pet->category);
|
|
free(pet->name);
|
|
list_ForEach(listEntry, pet->photoUrls) {
|
|
free(listEntry->data);
|
|
}
|
|
list_free(pet->photoUrls);
|
|
list_ForEach(listEntry, pet->tags) {
|
|
tag_free(listEntry->data);
|
|
}
|
|
list_free(pet->tags);
|
|
|
|
free(pet);
|
|
}
|
|
|
|
cJSON *pet_convertToJSON(pet_t *pet) {
|
|
cJSON *item = cJSON_CreateObject();
|
|
// pet->id
|
|
if(cJSON_AddNumberToObject(item, "id", pet->id) == NULL) {
|
|
goto fail; // Numeric
|
|
}
|
|
|
|
// pet->category
|
|
cJSON *category = category_convertToJSON(pet->category);
|
|
if(category == NULL) {
|
|
goto fail; // nonprimitive
|
|
}
|
|
cJSON_AddItemToObject(item, "category", category);
|
|
if(item->child == NULL) {
|
|
goto fail;
|
|
}
|
|
|
|
// pet->name
|
|
if(cJSON_AddStringToObject(item, "name", pet->name) == NULL) {
|
|
goto fail; // String
|
|
}
|
|
|
|
// pet->photoUrls
|
|
cJSON *photo_urls = cJSON_AddArrayToObject(item, "photoUrls");
|
|
if(photo_urls == NULL) {
|
|
goto fail; // primitive container
|
|
}
|
|
|
|
listEntry_t *photo_urlsListEntry;
|
|
list_ForEach(photo_urlsListEntry, pet->photoUrls) {
|
|
if(cJSON_AddStringToObject(photo_urls, "",
|
|
(char *) photo_urlsListEntry->data)
|
|
== NULL)
|
|
{
|
|
goto fail;
|
|
}
|
|
}
|
|
|
|
// pet->tags
|
|
cJSON *tags = cJSON_AddArrayToObject(item, "tags");
|
|
if(tags == NULL) {
|
|
goto fail; // nonprimitive container
|
|
}
|
|
|
|
listEntry_t *tagsListEntry;
|
|
list_ForEach(tagsListEntry, pet->tags) {
|
|
cJSON *item = tag_convertToJSON(tagsListEntry->data);
|
|
if(item == NULL) {
|
|
goto fail;
|
|
}
|
|
cJSON_AddItemToArray(tags, item);
|
|
}
|
|
|
|
// pet->status
|
|
if(cJSON_AddStringToObject(item, "status",
|
|
statuspet_ToString(pet->status)) == NULL)
|
|
{
|
|
goto fail; // String
|
|
}
|
|
|
|
return item;
|
|
fail:
|
|
cJSON_Delete(item);
|
|
return NULL;
|
|
}
|
|
|
|
pet_t *pet_parseFromJSON(char *jsonString) {
|
|
pet_t *pet = NULL;
|
|
cJSON *petJSON = cJSON_Parse(jsonString);
|
|
if(petJSON == NULL) {
|
|
const char *error_ptr = cJSON_GetErrorPtr();
|
|
if(error_ptr != NULL) {
|
|
fprintf(stderr, "Error Before: %s\n", error_ptr);
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
// pet->id
|
|
cJSON *id = cJSON_GetObjectItemCaseSensitive(petJSON, "id");
|
|
if(!cJSON_IsNumber(id)) {
|
|
goto end; // Numeric
|
|
}
|
|
|
|
// pet->category
|
|
category_t *category;
|
|
cJSON *categoryJSON = cJSON_GetObjectItemCaseSensitive(petJSON,
|
|
"category");
|
|
if(petJSON == NULL) {
|
|
const char *error_ptr = cJSON_GetErrorPtr();
|
|
if(error_ptr != NULL) {
|
|
fprintf(stderr, "Error Before: %s\n", error_ptr);
|
|
}
|
|
goto end; // nonprimitive
|
|
}
|
|
char *categoryJSONData = cJSON_Print(categoryJSON);
|
|
category = category_parseFromJSON(categoryJSONData);
|
|
|
|
// pet->name
|
|
cJSON *name = cJSON_GetObjectItemCaseSensitive(petJSON, "name");
|
|
if(!cJSON_IsString(name) ||
|
|
(name->valuestring == NULL))
|
|
{
|
|
goto end; // String
|
|
}
|
|
|
|
// pet->photoUrls
|
|
cJSON *photo_urls;
|
|
cJSON *photoUrlsJSON = cJSON_GetObjectItemCaseSensitive(petJSON,
|
|
"photoUrls");
|
|
if(!cJSON_IsArray(photoUrlsJSON)) {
|
|
goto end; // primitive container
|
|
}
|
|
list_t *photo_urlsList = list_create();
|
|
|
|
cJSON_ArrayForEach(photo_urls, photoUrlsJSON)
|
|
{
|
|
if(!cJSON_IsString(photo_urls)) {
|
|
goto end;
|
|
}
|
|
list_addElement(photo_urlsList,
|
|
strdup(photo_urls->valuestring));
|
|
}
|
|
|
|
// pet->tags
|
|
cJSON *tags;
|
|
cJSON *tagsJSON = cJSON_GetObjectItemCaseSensitive(petJSON, "tags");
|
|
if(!cJSON_IsArray(tagsJSON)) {
|
|
goto end; // nonprimitive container
|
|
}
|
|
|
|
list_t *tagsList = list_create();
|
|
|
|
cJSON_ArrayForEach(tags, tagsJSON)
|
|
{
|
|
if(!cJSON_IsObject(tags)) {
|
|
goto end;
|
|
}
|
|
char *JSONData = cJSON_Print(tags);
|
|
tag_t *tagsItem = tag_parseFromJSON(JSONData);
|
|
|
|
list_addElement(tagsList, tagsItem);
|
|
free(JSONData);
|
|
}
|
|
|
|
// pet->status
|
|
status_e statusVariable;
|
|
cJSON *status = cJSON_GetObjectItemCaseSensitive(petJSON, "status");
|
|
if(!cJSON_IsString(status) ||
|
|
(status->valuestring == NULL))
|
|
{
|
|
goto end; // String
|
|
}
|
|
|
|
statusVariable = statuspet_FromString(status->valuestring);
|
|
|
|
|
|
pet = pet_create(
|
|
id->valuedouble,
|
|
category,
|
|
strdup(name->valuestring),
|
|
photo_urlsList,
|
|
tagsList,
|
|
statusVariable
|
|
);
|
|
free(categoryJSONData);
|
|
cJSON_Delete(petJSON);
|
|
return pet;
|
|
end:
|
|
cJSON_Delete(petJSON);
|
|
return NULL;
|
|
}
|