[C] Optimize memory usage when printing JSON (#18072)

* cJSON generate unformatted json to save memory during large objects handling

* update sample

* add option to use cjson print unforamtted in client

* remove unused test template files

* add new samples

* update workflow

* update doc

* fix model filename

* fix inclulde

---------

Co-authored-by: Hemant Zope <42613258+zhemant@users.noreply.github.com>
Co-authored-by: Hemant Zope <hemantzope2008@gmail.com>
This commit is contained in:
William Cheng 2024-03-11 16:18:08 +08:00 committed by GitHub
parent 4ff7e0ec3f
commit 7f1e79f7d2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
79 changed files with 9865 additions and 441 deletions

View File

@ -4,14 +4,23 @@ on:
push:
paths:
- 'samples/client/petstore/c/**'
- 'samples/client/petstore/c-useJsonUnformatted/**'
pull_request:
paths:
- 'samples/client/petstore/c/**'
- 'samples/client/petstore/c-useJsonUnformatted/**'
jobs:
build:
name: Build c libcurl client
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
sample:
- 'samples/client/petstore/c/'
- 'samples/client/petstore/c-useJsonUnformatted/'
steps:
- uses: actions/checkout@v4
- name: Prepare
@ -19,7 +28,7 @@ jobs:
sudo apt-get update
sudo apt-get install -y libssl-dev libcurl4-openssl-dev
- name: Build
working-directory: "samples/client/petstore/c"
working-directory: ${{ matrix.sample }}
run: |
mkdir build
cd build

View File

@ -0,0 +1,9 @@
generatorName: c
outputDir: samples/client/petstore/c-useJsonUnformatted
inputSpec: modules/openapi-generator/src/test/resources/2_0/c/petstore.yaml
templateDir: modules/openapi-generator/src/main/resources/C-libcurl
additionalProperties:
useJsonUnformatted: true
modelNameMappings:
another_model: MappedModel
another_property: mappedProperty

View File

@ -27,6 +27,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|prependFormOrBodyParameters|Add form or body parameters to the beginning of the parameter list.| |false|
|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |true|
|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true|
|useJsonUnformatted|Use cJSON_PrintUnformatted instead of cJSON_Print when creating the JSON string.| |false|
## IMPORT MAPPING

View File

@ -39,6 +39,9 @@ import static org.openapitools.codegen.utils.StringUtils.underscore;
public class CLibcurlClientCodegen extends DefaultCodegen implements CodegenConfig {
private final Logger LOGGER = LoggerFactory.getLogger(CLibcurlClientCodegen.class);
public static final String USE_JSON_UNFORMATTED = "useJsonUnformatted";
public static final String USE_JSON_UNFORMATTED_DESC = "Use cJSON_PrintUnformatted instead of cJSON_Print when creating the JSON string.";
public static final String PROJECT_NAME = "projectName";
protected String moduleName;
protected String projectName;
@ -47,6 +50,7 @@ public class CLibcurlClientCodegen extends DefaultCodegen implements CodegenConf
protected String libFolder = "lib";
protected String apiDocPath = "docs/";
protected String modelDocPath = "docs/";
protected boolean useJsonUnformatted = false;
protected static int emptyMethodNameCounter = 0;
@ -306,6 +310,8 @@ public class CLibcurlClientCodegen extends DefaultCodegen implements CodegenConf
cliOptions.add(new CliOption(CodegenConstants.HIDE_GENERATION_TIMESTAMP, CodegenConstants.HIDE_GENERATION_TIMESTAMP_DESC).
defaultValue(Boolean.TRUE.toString()));
cliOptions.add(new CliOption(USE_JSON_UNFORMATTED, USE_JSON_UNFORMATTED_DESC).
defaultValue(Boolean.FALSE.toString()));
}
@Override
@ -316,6 +322,15 @@ public class CLibcurlClientCodegen extends DefaultCodegen implements CodegenConf
LOGGER.info("Environment variable C_POST_PROCESS_FILE not defined so the C code may not be properly formatted by uncrustify (0.66 or later) or other code formatter. To define it, try `export C_POST_PROCESS_FILE=\"/usr/local/bin/uncrustify --no-backup\" && export UNCRUSTIFY_CONFIG=/path/to/uncrustify-rules.cfg` (Linux/Mac). Note: replace /path/to with the location of uncrustify-rules.cfg");
}
if (additionalProperties.containsKey(USE_JSON_UNFORMATTED)) {
useJsonUnformatted = Boolean.parseBoolean(additionalProperties.get(USE_JSON_UNFORMATTED).toString());
}
if (useJsonUnformatted) {
additionalProperties.put("cJSONPrint", "cJSON_PrintUnformatted");
} else {
additionalProperties.put("cJSONPrint", "cJSON_Print");
}
// make api and model doc path available in mustache template
additionalProperties.put("apiDocPath", apiDocPath);
additionalProperties.put("modelDocPath", modelDocPath);

View File

@ -56,13 +56,13 @@ set(SRCS
model/object.c
{{#models}}
{{#model}}
model/{{classname}}.c
model/{{classFilename}}.c
{{/model}}
{{/models}}
{{#apiInfo}}
{{#apis}}
{{#operations}}
api/{{classname}}.c
api/{{classFilename}}.c
{{/operations}}
{{/apis}}
{{/apiInfo}}
@ -78,13 +78,13 @@ set(HDRS
model/object.h
{{#models}}
{{#model}}
model/{{classname}}.h
model/{{classFilename}}.h
{{/model}}
{{/models}}
{{#apiInfo}}
{{#apis}}
{{#operations}}
api/{{classname}}.h
api/{{classFilename}}.h
{{/operations}}
{{/apis}}
{{/apiInfo}}

View File

@ -320,7 +320,7 @@ end:
goto end;
}
cJSON_AddItemToArray(localVarSingleItemJSON_{{paramName}}, localVar_{{paramName}});
localVarBodyParameters = cJSON_Print(localVarItemJSON_{{paramName}});
localVarBodyParameters = {{{cJSONPrint}}}(localVarItemJSON_{{paramName}});
}
{{/isArray}}
{{^isArray}}
@ -329,7 +329,7 @@ end:
{
//string
localVarSingleItemJSON_{{paramName}} = {{dataType}}_convertToJSON({{paramName}});
localVarBodyParameters = cJSON_Print(localVarSingleItemJSON_{{paramName}});
localVarBodyParameters = {{{cJSONPrint}}}(localVarSingleItemJSON_{{paramName}});
}
{{/isArray}}
{{/bodyParam}}
@ -368,7 +368,7 @@ end:
cJSON *{{{paramName}}}VarJSON;
list_t *elementToReturn = list_createList();
cJSON_ArrayForEach({{{paramName}}}VarJSON, {{paramName}}localVarJSON){
keyValuePair_t *keyPair = keyValuePair_create(strdup({{{paramName}}}VarJSON->string), cJSON_Print({{{paramName}}}VarJSON));
keyValuePair_t *keyPair = keyValuePair_create(strdup({{{paramName}}}VarJSON->string), {{{cJSONPrint}}}({{{paramName}}}VarJSON));
list_addElement(elementToReturn, keyPair);
}
cJSON_Delete({{paramName}}localVarJSON);
@ -389,7 +389,7 @@ end:
{
// return 0;
}
char *localVarJSONToChar = cJSON_Print({{{paramName}}}VarJSON);
char *localVarJSONToChar = {{{cJSONPrint}}}({{{paramName}}}VarJSON);
list_addElement(elementToReturn , localVarJSONToChar);
}

View File

@ -1,128 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "apiClient.h"
#include "cJSON.h"
#include "pet.h"
#include "PetAPI.h"
#include "category.h"
#include "tag.h"
#include "keyValuePair.h"
#define EXAMPLE_CATEGORY_NAME "Example Category"
#define EXAMPLE_CATEGORY_ID 5
#define EXAMPLE_PET_NAME "Example Pet"
#define EXAMPLE_URL_1 "http://www.github.com"
#define EXAMPLE_URL_2 "http://www.gitter.im"
#define EXAMPLE_TAG_1_NAME "beautiful code"
#define EXAMPLE_TAG_2_NAME "at least I tried"
#define EXAMPLE_TAG_1_ID 1
#define EXAMPLE_TAG_2_ID 542353
#define EXAMPLE_PET_ID 1234 // Set to 0 to generate a new pet
int main() {
// Add pet test
apiClient_t *apiClient = apiClient_create();
char *categoryName = malloc(strlen(EXAMPLE_CATEGORY_NAME) + 1);
strcpy(categoryName, EXAMPLE_CATEGORY_NAME);
category_t *category =
category_create(EXAMPLE_CATEGORY_ID, categoryName);
char *petName = malloc(strlen(EXAMPLE_PET_NAME) + 1);
strcpy(petName, EXAMPLE_PET_NAME);
char *exampleUrl1 = malloc(strlen(EXAMPLE_URL_1) + 1);
strcpy(exampleUrl1, EXAMPLE_URL_1);
char *exampleUrl2 = malloc(strlen(EXAMPLE_URL_2) + 1);
strcpy(exampleUrl2, EXAMPLE_URL_2);
list_t *photoUrls = list_createList();
list_addElement(photoUrls, exampleUrl1);
list_addElement(photoUrls, exampleUrl2);
char *exampleTag1Name = malloc(strlen(EXAMPLE_TAG_1_NAME) + 1);
strcpy(exampleTag1Name, EXAMPLE_TAG_1_NAME);
tag_t *exampleTag1 = tag_create(EXAMPLE_TAG_1_ID, exampleTag1Name);
char *exampleTag2Name = malloc(strlen(EXAMPLE_TAG_2_NAME) + 1);
strcpy(exampleTag2Name, EXAMPLE_TAG_2_NAME);
tag_t *exampleTag2 = tag_create(EXAMPLE_TAG_2_ID, exampleTag2Name);
list_t *tags = list_createList();
list_addElement(tags, exampleTag1);
list_addElement(tags, exampleTag2);
status_e status = available;
pet_t *pet =
pet_create(EXAMPLE_PET_ID,
category,
petName,
photoUrls,
tags,
status);
PetAPI_addPet(apiClient, pet);
pet_free(pet);
//Pet update with form test
char *petName1 = "Rocky Handsome";
char *petName2 = "sold";
apiClient_t *apiClient1 = apiClient_create();
PetAPI_updatePetWithForm(apiClient1, EXAMPLE_PET_ID, petName1,
petName2);
//Get pet by id test
apiClient_t *apiClient2 = apiClient_create();
pet_t *mypet = PetAPI_getPetById(apiClient2, EXAMPLE_PET_ID);
cJSON *JSONR = pet_convertToJSON(mypet);
char *petJson = cJSON_Print(JSONR);
printf("Data is:%s\n", petJson);
assert(strcmp(mypet->name, "Rocky Handsome") == 0);
assert(mypet->id == EXAMPLE_PET_ID);
assert(strcmp(mypet->category->name, EXAMPLE_CATEGORY_NAME) == 0);
assert(mypet->category->id == EXAMPLE_CATEGORY_ID);
assert(strcmp(list_getElementAt(mypet->photoUrls,
0)->data, EXAMPLE_URL_1) == 0);
assert(strcmp(list_getElementAt(mypet->photoUrls,
1)->data, EXAMPLE_URL_2) == 0);
assert(((tag_t *) list_getElementAt(mypet->tags,
0)->data)->id == EXAMPLE_TAG_1_ID);
assert(((tag_t *) list_getElementAt(mypet->tags,
1)->data)->id == EXAMPLE_TAG_2_ID);
assert(strcmp(((tag_t *) list_getElementAt(mypet->tags, 0)->data)->name,
EXAMPLE_TAG_1_NAME) == 0);
assert(strcmp(((tag_t *) list_getElementAt(mypet->tags, 1)->data)->name,
EXAMPLE_TAG_2_NAME) == 0);
free(petJson);
cJSON_Delete(JSONR);
pet_free(mypet);
//Pet upload file Test
apiClient_t *apiClient3 = apiClient_create();
FILE *file = fopen("/opt/image.png", "r");
if(file != NULL){
api_response_t *respo = PetAPI_uploadFile(apiClient3,
EXAMPLE_PET_ID,
"dec",
file);
api_response_free(respo);
fclose(file);
}
}

View File

@ -1,94 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "apiClient.h"
#include "cJSON.h"
#include "order.h"
#include "StoreAPI.h"
#include "keyValuePair.h"
#define ORDER_ID 1234
#define PET_ID 12345
#define QUANTITY 50
#define SHIP_DATE "2018-09-24T10:19:09.592Z"
#define STATUS placed
#define COMPLETE true
/*
Creates one pet and adds it. Then gets the pet with the just added ID and compare if the values are equal.
Could fail if someone else makes changes to the added pet, before it can be fetched again.
*/
int main() {
//place order test
apiClient_t *apiClient = apiClient_create();
char *shipdate = malloc(strlen(SHIP_DATE) + 1);
strcpy(shipdate, SHIP_DATE);
order_t *neworder = order_create(ORDER_ID,
PET_ID,
QUANTITY,
shipdate,
STATUS,
COMPLETE);
order_t *returnorder = StoreAPI_placeOrder(apiClient, neworder);
cJSON *JSONNODE = order_convertToJSON(returnorder);
char *dataToPrint = cJSON_Print(JSONNODE);
printf("Placed order: \n%s\n", dataToPrint);
order_free(neworder);
order_free(returnorder);
cJSON_Delete(JSONNODE);
free(dataToPrint);
//order get by id test
apiClient_t *apiClient2 = apiClient_create();
neworder = StoreAPI_getOrderById(apiClient2, 1234);
JSONNODE = order_convertToJSON(neworder);
char *dataToPrint1 = cJSON_Print(JSONNODE);
printf("Order received: \n%s\n", dataToPrint1);
order_free(neworder);
cJSON_Delete(JSONNODE);
free(dataToPrint1);
//delete order test
apiClient_t *apiClient3 = apiClient_create();
char *orderid = malloc(strlen("1234") + 1);
strcpy(orderid, "1234");
StoreAPI_deleteOrder(apiClient3, orderid);
printf("Order Deleted \n");
free(orderid);
// get order by id test
apiClient_t *apiClient4 = apiClient_create();
neworder = StoreAPI_getOrderById(apiClient4, 1234);
if(neworder == NULL) {
printf("Order Not present \n");
}
//get inventory test
apiClient_t *apiClient5 = apiClient_create();
list_t *elementToReturn;
elementToReturn = StoreAPI_getInventory(apiClient5);
listEntry_t *listEntry;
list_ForEach(listEntry, elementToReturn) {
keyValuePair_free(listEntry->data);
}
list_freeList(elementToReturn);
}

View File

@ -1,121 +0,0 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "apiClient.h"
#include "cJSON.h"
#include "keyValuePair.h"
#include "user.h"
#include "UserAPI.h"
#define USER_ID 1234
#define USER_NAME "example123"
#define FIRST_NAME "Example1"
#define LAST_NAME "Example2Last"
#define LAST_NAME1 "LastName"
#define EMAIL "example@example.com"
#define PASSWORD "thisisexample!123"
#define PHONE "+123456789"
#define USER_STATUS 4
int main() {
//create user test
apiClient_t *apiClient = apiClient_create();
char *username = malloc(strlen(USER_NAME) + 1);
strcpy(username, USER_NAME);
char *firstname = malloc(strlen(FIRST_NAME) + 1);
strcpy(firstname, FIRST_NAME);
char *lastname = malloc(strlen(LAST_NAME) + 1);
strcpy(lastname, LAST_NAME);
char *email = malloc(strlen(EMAIL) + 1);
strcpy(email, EMAIL);
char *password = malloc(strlen(PASSWORD) + 1);
strcpy(password, PASSWORD);
char *phone = malloc(strlen(PHONE) + 1);
strcpy(phone, PHONE);
user_t *newuser = user_create(USER_ID,
username,
firstname,
lastname,
email,
password,
phone,
USER_STATUS);
UserAPI_createUser(apiClient, newuser);
user_free(newuser);
//get user by name test
apiClient_t *apiClient1 = apiClient_create();
user_t *returnUser = UserAPI_getUserByName(apiClient1, USER_NAME);
cJSON *JSONNODE = user_convertToJSON(returnUser);
char *dataToPrint = cJSON_Print(JSONNODE);
printf("User is: \n%s\n", dataToPrint);
user_free(returnUser);
cJSON_Delete(JSONNODE);
free(dataToPrint);
//update user test
{
apiClient_t *apiClient2 = apiClient_create();
char *username1 = malloc(strlen(USER_NAME) + 1);
strcpy(username1, USER_NAME);
char *firstname = malloc(strlen(FIRST_NAME) + 1);
strcpy(firstname, FIRST_NAME);
char *lastname = malloc(strlen(LAST_NAME) + 1);
strcpy(lastname, LAST_NAME);
char *email = malloc(strlen(EMAIL) + 1);
strcpy(email, EMAIL);
char *password = malloc(strlen(PASSWORD) + 1);
strcpy(password, PASSWORD);
char *phone = malloc(strlen(PHONE) + 1);
strcpy(phone, PHONE);
user_t *newuser1 = user_create(USER_ID,
username1,
firstname,
lastname,
email,
password,
phone,
USER_STATUS);
UserAPI_updateUser(apiClient2, username1, newuser1);
user_free(newuser1);
}
//login user test
{
char *username1 = malloc(strlen(USER_NAME) + 1);
strcpy(username1, USER_NAME);
char *password = malloc(strlen(PASSWORD) + 1);
strcpy(password, PASSWORD);
apiClient_t *apiClient3 = apiClient_create();
char *loginuserreturn = UserAPI_loginUser(apiClient3,
username1,
password);
printf("Login User: %s\n", loginuserreturn);
free(loginuserreturn);
free(username1);
free(password);
}
// logout user test
apiClient_t *apiClient4 = apiClient_create();
UserAPI_logoutUser(apiClient4);
// delete user test
apiClient_t *apiClient5 = apiClient_create();
UserAPI_deleteUser(apiClient5, "example123");
}

View File

@ -3,7 +3,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "{{classname}}.h"
#include "{{classFilename}}.h"
{{#isEnum}}

View File

@ -1,5 +1,5 @@
{{#models}}{{#model}}/*
* {{classname}}.h
* {{classFilename}}.h
*
* {{description}}
*/

View File

@ -1,40 +0,0 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "cJSON.h"
#include "order.h"
#define ORDER_ID 1234
#define PET_ID 12345
#define QUANTITY 50
#define SHIP_DATE "13/10/2018"
#define COMPLETE 1
int main() {
status_e STATUS = placed;
order_t *neworder = order_create(ORDER_ID, PET_ID, QUANTITY, SHIP_DATE, STATUS,
COMPLETE);
cJSON *JSONNODE = order_convertToJSON(neworder);
char *dataToPrint = cJSON_Print(JSONNODE);
printf("Created Order is: \n%s\n",dataToPrint);
order_t *parsedOrder = order_parseFromJSON( dataToPrint);
cJSON *fromJSON = order_convertToJSON(parsedOrder);
char *dataToPrintFromJSON = cJSON_Print(fromJSON);
printf("Parsed Order From JSON is: \n%s\n",dataToPrintFromJSON);
order_free(neworder);
order_free(parsedOrder);
cJSON_Delete(JSONNODE);
cJSON_Delete(fromJSON);
}

View File

@ -50,10 +50,10 @@ void test_{{classname}}(int include_optional) {
{{classname}}_t* {{classname}}_1 = instantiate_{{classname}}(include_optional);
cJSON* json{{classname}}_1 = {{classname}}_convertToJSON({{classname}}_1);
printf("{{classname}} :\n%s\n", cJSON_Print(json{{classname}}_1));
printf("{{classname}} :\n%s\n", {{{cJSONPrint}}}(json{{classname}}_1));
{{classname}}_t* {{classname}}_2 = {{classname}}_parseFromJSON(json{{classname}}_1);
cJSON* json{{classname}}_2 = {{classname}}_convertToJSON({{classname}}_2);
printf("repeating {{classname}}:\n%s\n", cJSON_Print(json{{classname}}_2));
printf("repeating {{classname}}:\n%s\n", {{{cJSONPrint}}}(json{{classname}}_2));
}
int main() {

View File

@ -1,42 +0,0 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "cJSON.h"
#include "user.h"
#define USER_ID 1234
#define USER_NAME "example123"
#define FIRST_NAME "Example1"
#define LAST_NAME "Example2"
#define EMAIL "example@example.com"
#define PASSWORD "thisisexample!123"
#define PHONE "+123456789"
#define USER_STATUS 4
int main() {
user_t *newuser = user_create(USER_ID, USER_NAME, FIRST_NAME, LAST_NAME, EMAIL,
PASSWORD, PHONE, USER_STATUS );
cJSON *JSONNODE = user_convertToJSON(newuser);
char *dataToPrint = cJSON_Print(JSONNODE);
printf("Created User is: \n%s\n",dataToPrint);
user_t *parsedUser = user_parseFromJSON( dataToPrint);
cJSON *fromJSON = user_convertToJSON(parsedUser);
char *dataToPrintFromJSON = cJSON_Print(fromJSON);
printf("Parsed User From JSON is: \n%s\n",dataToPrintFromJSON);
user_free(newuser);
user_free(parsedUser);
cJSON_Delete(JSONNODE);
cJSON_Delete(fromJSON);
}

View File

@ -43,7 +43,7 @@ object_t *object_parseFromJSON(cJSON *json){
if (!object) {
goto end;
}
object->temporary = cJSON_Print(json);
object->temporary = {{{cJSONPrint}}}(json);
return object;
end:

View File

@ -0,0 +1,23 @@
# OpenAPI Generator Ignore
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
# Use this file to prevent files from being overwritten by the generator.
# The patterns follow closely to .gitignore or .dockerignore.
# As an example, the C# client generator defines ApiClient.cs.
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
#ApiClient.cs
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
#foo/*/qux
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
#foo/**/qux
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
# You can also negate patterns with an exclamation (!).
# For example, you can ignore all files in a docs folder with the file extension .md:
#docs/*.md
# Then explicitly reverse the ignore rule for a single file:
#!docs/README.md

View File

@ -0,0 +1,51 @@
CMakeLists.txt
Packing.cmake
README.md
api/PetAPI.c
api/PetAPI.h
api/StoreAPI.c
api/StoreAPI.h
api/UserAPI.c
api/UserAPI.h
docs/MappedModel.md
docs/PetAPI.md
docs/StoreAPI.md
docs/UserAPI.md
docs/api_response.md
docs/category.md
docs/model_with_set_propertes.md
docs/order.md
docs/pet.md
docs/tag.md
docs/user.md
external/cJSON.c
external/cJSON.h
external/cJSON.licence
include/apiClient.h
include/binary.h
include/keyValuePair.h
include/list.h
libcurl.licence
model/api_response.c
model/api_response.h
model/category.c
model/category.h
model/mapped_model.c
model/mapped_model.h
model/model_with_set_propertes.c
model/model_with_set_propertes.h
model/object.c
model/object.h
model/order.c
model/order.h
model/pet.c
model/pet.h
model/tag.c
model/tag.h
model/user.c
model/user.h
src/apiClient.c
src/apiKey.c
src/binary.c
src/list.c
uncrustify-rules.cfg

View File

@ -0,0 +1 @@
7.5.0-SNAPSHOT

View File

@ -0,0 +1,189 @@
cmake_minimum_required (VERSION 2.6...3.10.2)
project (CGenerator)
cmake_policy(SET CMP0063 NEW)
set(CMAKE_C_VISIBILITY_PRESET default)
set(CMAKE_CXX_VISIBILITY_PRESET default)
set(CMAKE_VISIBILITY_INLINES_HIDDEN OFF)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
find_package(OpenSSL)
if (OPENSSL_FOUND)
message (STATUS "OPENSSL found")
set(CMAKE_C_FLAGS "-DOPENSSL")
if(CMAKE_VERSION VERSION_LESS 3.4)
include_directories(${OPENSSL_INCLUDE_DIR})
include_directories(${OPENSSL_INCLUDE_DIRS})
link_directories(${OPENSSL_LIBRARIES})
endif()
message(STATUS "Using OpenSSL ${OPENSSL_VERSION}")
else()
message (STATUS "OpenSSL Not found.")
endif()
set(pkgName "openapi_petstore")
# this default version can be overridden in PreTarget.cmake
set(PROJECT_VERSION_MAJOR 0)
set(PROJECT_VERSION_MINOR 0)
set(PROJECT_VERSION_PATCH 1)
if( (DEFINED CURL_INCLUDE_DIR) AND (DEFINED CURL_LIBRARIES))
include_directories(${CURL_INCLUDE_DIR})
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} ${CURL_LIBRARIES} )
else()
find_package(CURL 7.58.0 REQUIRED)
if(CURL_FOUND)
include_directories(${CURL_INCLUDE_DIR})
set(PLATFORM_LIBRARIES ${PLATFORM_LIBRARIES} ${CURL_LIBRARIES} )
else(CURL_FOUND)
message(FATAL_ERROR "Could not find the CURL library and development files.")
endif()
endif()
set(SRCS
src/list.c
src/apiKey.c
src/apiClient.c
src/binary.c
external/cJSON.c
model/object.c
model/mapped_model.c
model/api_response.c
model/category.c
model/model_with_set_propertes.c
model/order.c
model/pet.c
model/tag.c
model/user.c
api/PetAPI.c
api/StoreAPI.c
api/UserAPI.c
)
set(HDRS
include/apiClient.h
include/list.h
include/binary.h
include/keyValuePair.h
external/cJSON.h
model/object.h
model/mapped_model.h
model/api_response.h
model/category.h
model/model_with_set_propertes.h
model/order.h
model/pet.h
model/tag.h
model/user.h
api/PetAPI.h
api/StoreAPI.h
api/UserAPI.h
)
include(PreTarget.cmake OPTIONAL)
set(PROJECT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
# Add library with project file with project name as library name
add_library(${pkgName} ${SRCS} ${HDRS})
# Link dependent libraries
if(NOT CMAKE_VERSION VERSION_LESS 3.4)
target_link_libraries(${pkgName} PRIVATE OpenSSL::SSL OpenSSL::Crypto)
endif()
target_link_libraries(${pkgName} PUBLIC ${CURL_LIBRARIES} )
target_include_directories(
${pkgName} PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
include(PostTarget.cmake OPTIONAL)
# installation of libraries, headers, and config files
if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in)
install(TARGETS ${pkgName} DESTINATION lib)
else()
include(GNUInstallDirs)
install(TARGETS ${pkgName} DESTINATION lib EXPORT ${pkgName}Targets)
foreach(HDR_FILE ${HDRS})
get_filename_component(HDR_DIRECTORY ${HDR_FILE} DIRECTORY)
get_filename_component(ABSOLUTE_HDR_DIRECTORY ${HDR_DIRECTORY} ABSOLUTE)
file(RELATIVE_PATH RELATIVE_HDR_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${ABSOLUTE_HDR_DIRECTORY})
install(FILES ${HDR_FILE} DESTINATION include/${pkgName}/${RELATIVE_HDR_PATH})
endforeach()
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${pkgName}/${pkgName}ConfigVersion.cmake"
VERSION "${PROJECT_VERSION_STRING}"
COMPATIBILITY AnyNewerVersion
)
export(EXPORT ${pkgName}Targets
FILE "${CMAKE_CURRENT_BINARY_DIR}/${pkgName}/${pkgName}Targets.cmake"
NAMESPACE ${pkgName}::
)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/${pkgName}/${pkgName}Config.cmake"
@ONLY
)
set(ConfigPackageLocation lib/cmake/${pkgName})
install(EXPORT ${pkgName}Targets
FILE
${pkgName}Targets.cmake
NAMESPACE
${pkgName}::
DESTINATION
${ConfigPackageLocation}
)
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/${pkgName}/${pkgName}Config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/${pkgName}/${pkgName}ConfigVersion.cmake"
DESTINATION
${ConfigPackageLocation}
)
endif()
# make installation packages
include(Packing.cmake OPTIONAL)
# Setting file variables to null
set(SRCS "")
set(HDRS "")
## This section shows how to use the above compiled library to compile the source files
## set source files
#set(SRCS
# unit-tests/manual-PetAPI.c
# unit-tests/manual-StoreAPI.c
# unit-tests/manual-UserAPI.c
#)
##set header files
#set(HDRS
#)
## loop over all files in SRCS variable
#foreach(SOURCE_FILE ${SRCS})
# # Get only the file name from the file as add_executable does not support executable with slash("/")
# get_filename_component(FILE_NAME_ONLY ${SOURCE_FILE} NAME_WE)
# # Remove .c from the file name and set it as executable name
# string( REPLACE ".c" "" EXECUTABLE_FILE ${FILE_NAME_ONLY})
# # Add executable for every source file in SRCS
# add_executable(unit-${EXECUTABLE_FILE} ${SOURCE_FILE})
# # Link above created library to executable and dependent library curl
# target_link_libraries(unit-${EXECUTABLE_FILE} ${CURL_LIBRARIES} ${pkgName} )
#endforeach(SOURCE_FILE ${SRCS})

View File

@ -0,0 +1,24 @@
set(CPACK_PACKAGE_NAME lib${pkgName})
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_PACKAGE_DESCRIPTION_SUMMARY})
set(CPACK_PACKAGE_VENDOR ${PROJECT_PACKAGE_VENDOR})
set(CPACK_PACKAGE_CONTACT ${PROJECT_PACKAGE_CONTACT})
set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${PROJECT_PACKAGE_MAINTAINER})
set(CPACK_VERBATIM_VARIABLES YES)
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
set(CPACK_DEB_COMPONENT_INSTALL YES)
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS TRUE)
include(CPack)

View File

@ -0,0 +1,128 @@
# C API client for openapi_petstore
## Overview
This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project. By using the [OpenAPI spec](https://openapis.org) from a remote server, you can easily generate an API client.
- API version: 1.0.0
- Package version:
- Generator version: 7.5.0-SNAPSHOT
- Build package: org.openapitools.codegen.languages.CLibcurlClientCodegen
## Installation
You'll need the `curl 7.58.0` package in order to build the API. To have code formatted nicely, you also need to have uncrustify version 0.67 or later.
# Prerequisites
## Install the `curl 7.58.0` package with the following command on Linux.
```bash
sudo apt remove curl
wget http://curl.haxx.se/download/curl-7.58.0.tar.gz
tar -xvf curl-7.58.0.tar.gz
cd curl-7.58.0/
./configure
make
sudo make install
```
## Install the `uncrustify 0.67` package with the following command on Linux.
```bash
git clone https://github.com/uncrustify/uncrustify.git
cd uncrustify
mkdir build
cd build
cmake ..
make
sudo make install
```
## Compile the sample:
This will compile the generated code and create a library in the build folder which has to be linked to the codes where API will be used.
```bash
mkdir build
cd build
// To install library to specific location, use following commands
cmake -DCMAKE_INSTALL_PREFIX=/pathtolocation ..
// for normal install use following command
cmake ..
make
sudo make install
```
## How to use compiled library
Considering the test/source code which uses the API is written in main.c(respective api include is written and all objects necessary are defined and created)
To compile main.c(considering the file is present in build folder) use following command
-L - location of the library(not required if cmake with normal installation is performed)
-l library name
```bash
gcc main.c -L. -lopenapi_petstore -o main
```
Once compiled, you can run it with ``` ./main ```
Note: You don't need to specify includes for models and include folder separately as they are path linked. You just have to import the api.h file in your code, the include linking will work.
## Documentation for API Endpoints
All URIs are relative to *http://petstore.swagger.io/v2*
Category | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
*PetAPI* | [**PetAPI_addPet**](docs/PetAPI.md#PetAPI_addPet) | **POST** /pet | Add a new pet to the store
*PetAPI* | [**PetAPI_deletePet**](docs/PetAPI.md#PetAPI_deletePet) | **DELETE** /pet/{petId} | Deletes a pet
*PetAPI* | [**PetAPI_findPetsByStatus**](docs/PetAPI.md#PetAPI_findPetsByStatus) | **GET** /pet/findByStatus | Finds Pets by status
*PetAPI* | [**PetAPI_findPetsByTags**](docs/PetAPI.md#PetAPI_findPetsByTags) | **GET** /pet/findByTags | Finds Pets by tags
*PetAPI* | [**PetAPI_getPetById**](docs/PetAPI.md#PetAPI_getPetById) | **GET** /pet/{petId} | Find pet by ID
*PetAPI* | [**PetAPI_updatePet**](docs/PetAPI.md#PetAPI_updatePet) | **PUT** /pet | Update an existing pet
*PetAPI* | [**PetAPI_updatePetWithForm**](docs/PetAPI.md#PetAPI_updatePetWithForm) | **POST** /pet/{petId} | Updates a pet in the store with form data
*PetAPI* | [**PetAPI_uploadFile**](docs/PetAPI.md#PetAPI_uploadFile) | **POST** /pet/{petId}/uploadImage | uploads an image
*StoreAPI* | [**StoreAPI_deleteOrder**](docs/StoreAPI.md#StoreAPI_deleteOrder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID
*StoreAPI* | [**StoreAPI_getInventory**](docs/StoreAPI.md#StoreAPI_getInventory) | **GET** /store/inventory | Returns pet inventories by status
*StoreAPI* | [**StoreAPI_getOrderById**](docs/StoreAPI.md#StoreAPI_getOrderById) | **GET** /store/order/{orderId} | Find purchase order by ID
*StoreAPI* | [**StoreAPI_placeOrder**](docs/StoreAPI.md#StoreAPI_placeOrder) | **POST** /store/order | Place an order for a pet
*UserAPI* | [**UserAPI_createUser**](docs/UserAPI.md#UserAPI_createUser) | **POST** /user | Create user
*UserAPI* | [**UserAPI_createUsersWithArrayInput**](docs/UserAPI.md#UserAPI_createUsersWithArrayInput) | **POST** /user/createWithArray | Creates list of users with given input array
*UserAPI* | [**UserAPI_createUsersWithListInput**](docs/UserAPI.md#UserAPI_createUsersWithListInput) | **POST** /user/createWithList | Creates list of users with given input array
*UserAPI* | [**UserAPI_deleteUser**](docs/UserAPI.md#UserAPI_deleteUser) | **DELETE** /user/{username} | Delete user
*UserAPI* | [**UserAPI_getUserByName**](docs/UserAPI.md#UserAPI_getUserByName) | **GET** /user/{username} | Get user by user name
*UserAPI* | [**UserAPI_loginUser**](docs/UserAPI.md#UserAPI_loginUser) | **GET** /user/login | Logs user into the system
*UserAPI* | [**UserAPI_logoutUser**](docs/UserAPI.md#UserAPI_logoutUser) | **GET** /user/logout | Logs out current logged in user session
*UserAPI* | [**UserAPI_testIntAndBool**](docs/UserAPI.md#UserAPI_testIntAndBool) | **GET** /user/testIntAndBool | test integer and boolean query parameters in API
*UserAPI* | [**UserAPI_updateUser**](docs/UserAPI.md#UserAPI_updateUser) | **PUT** /user/{username} | Updated user
## Documentation for Models
- [MappedModel_t](docs/MappedModel.md)
- [api_response_t](docs/api_response.md)
- [category_t](docs/category.md)
- [model_with_set_propertes_t](docs/model_with_set_propertes.md)
- [order_t](docs/order.md)
- [pet_t](docs/pet.md)
- [tag_t](docs/tag.md)
- [user_t](docs/user.md)
## Documentation for Authorization
Authentication schemes defined for the API:
### petstore_auth
- **Type**: OAuth
- **Flow**: implicit
- **Authorization URL**: http://petstore.swagger.io/api/oauth/dialog
- **Scopes**:
- write:pets: modify pets in your account
- read:pets: read your pets
### api_key
- **Type**: API key
- **API key parameter name**: api_key
- **Location**: HTTP header
## Author

View File

@ -0,0 +1,759 @@
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include "PetAPI.h"
#define MAX_NUMBER_LENGTH 16
#define MAX_BUFFER_LENGTH 4096
#define intToStr(dst, src) \
do {\
char dst[256];\
snprintf(dst, 256, "%ld", (long int)(src));\
}while(0)
// Functions for enum STATUS for PetAPI_findPetsByStatus
static char* findPetsByStatus_STATUS_ToString(openapi_petstore_findPetsByStatus_status_e STATUS){
char *STATUSArray[] = { "NULL", "available", "pending", "sold" };
return STATUSArray[STATUS];
}
static openapi_petstore_findPetsByStatus_status_e findPetsByStatus_STATUS_FromString(char* STATUS){
int stringToReturn = 0;
char *STATUSArray[] = { "NULL", "available", "pending", "sold" };
size_t sizeofArray = sizeof(STATUSArray) / sizeof(STATUSArray[0]);
while(stringToReturn < sizeofArray) {
if(strcmp(STATUS, STATUSArray[stringToReturn]) == 0) {
return stringToReturn;
}
stringToReturn++;
}
return 0;
}
/*
// Function findPetsByStatus_STATUS_convertToJSON is not currently used,
// since conversion to JSON passes through the conversion of the model, and ToString. The function is kept for future reference.
//
static cJSON *findPetsByStatus_STATUS_convertToJSON(openapi_petstore_findPetsByStatus_status_e STATUS) {
cJSON *item = cJSON_CreateObject();
return item;
fail:
cJSON_Delete(item);
return NULL;
}
// Function findPetsByStatus_STATUS_parseFromJSON is not currently used,
// since conversion from JSON passes through the conversion of the model, and FromString. The function is kept for future reference.
//
static openapi_petstore_findPetsByStatus_status_e findPetsByStatus_STATUS_parseFromJSON(cJSON* STATUSJSON) {
openapi_petstore_findPetsByStatus_status_e STATUSVariable = 0;
return STATUSVariable;
end:
return 0;
}
*/
// Add a new pet to the store
//
void
PetAPI_addPet(apiClient_t *apiClient, pet_t *body)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = NULL;
list_t *localVarContentType = list_createList();
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/pet")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/pet");
// Body Param
cJSON *localVarSingleItemJSON_body = NULL;
if (body != NULL)
{
//string
localVarSingleItemJSON_body = pet_convertToJSON(body);
localVarBodyParameters = cJSON_PrintUnformatted(localVarSingleItemJSON_body);
}
list_addElement(localVarContentType,"application/json"); //consumes
list_addElement(localVarContentType,"application/xml"); //consumes
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"POST");
// uncomment below to debug the error response
//if (apiClient->response_code == 405) {
// printf("%s\n","Invalid input");
//}
//No return type
end:
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarContentType);
free(localVarPath);
if (localVarSingleItemJSON_body) {
cJSON_Delete(localVarSingleItemJSON_body);
localVarSingleItemJSON_body = NULL;
}
free(localVarBodyParameters);
}
// Deletes a pet
//
void
PetAPI_deletePet(apiClient_t *apiClient, long petId, char *api_key)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = list_createList();
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = NULL;
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/pet/{petId}")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/pet/{petId}");
// Path Params
long sizeOfPathParams_petId = sizeof(petId)+3 + strlen("{ petId }");
if(petId == 0){
goto end;
}
char* localVarToReplace_petId = malloc(sizeOfPathParams_petId);
snprintf(localVarToReplace_petId, sizeOfPathParams_petId, "{%s}", "petId");
char localVarBuff_petId[256];
intToStr(localVarBuff_petId, petId);
localVarPath = strReplace(localVarPath, localVarToReplace_petId, localVarBuff_petId);
// header parameters
char *keyHeader_api_key = NULL;
char * valueHeader_api_key = 0;
keyValuePair_t *keyPairHeader_api_key = 0;
if (api_key) {
keyHeader_api_key = strdup("api_key");
valueHeader_api_key = strdup((api_key));
keyPairHeader_api_key = keyValuePair_create(keyHeader_api_key, valueHeader_api_key);
list_addElement(localVarHeaderParameters,keyPairHeader_api_key);
}
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"DELETE");
// uncomment below to debug the error response
//if (apiClient->response_code == 400) {
// printf("%s\n","Invalid pet value");
//}
//No return type
end:
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarHeaderParameters);
free(localVarPath);
free(localVarToReplace_petId);
if (keyHeader_api_key) {
free(keyHeader_api_key);
keyHeader_api_key = NULL;
}
if (valueHeader_api_key) {
free(valueHeader_api_key);
valueHeader_api_key = NULL;
}
free(keyPairHeader_api_key);
}
// Finds Pets by status
//
// Multiple status values can be provided with comma separated strings
//
list_t*
PetAPI_findPetsByStatus(apiClient_t *apiClient, list_t *status)
{
list_t *localVarQueryParameters = list_createList();
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = list_createList();
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/pet/findByStatus")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/pet/findByStatus");
// query parameters
if (status)
{
list_addElement(localVarQueryParameters,status);
}
list_addElement(localVarHeaderType,"application/xml"); //produces
list_addElement(localVarHeaderType,"application/json"); //produces
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"GET");
// uncomment below to debug the error response
//if (apiClient->response_code == 200) {
// printf("%s\n","successful operation");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 400) {
// printf("%s\n","Invalid status value");
//}
cJSON *PetAPIlocalVarJSON = cJSON_Parse(apiClient->dataReceived);
if(!cJSON_IsArray(PetAPIlocalVarJSON)) {
return 0;//nonprimitive container
}
list_t *elementToReturn = list_createList();
cJSON *VarJSON;
cJSON_ArrayForEach(VarJSON, PetAPIlocalVarJSON)
{
if(!cJSON_IsObject(VarJSON))
{
// return 0;
}
char *localVarJSONToChar = cJSON_PrintUnformatted(VarJSON);
list_addElement(elementToReturn , localVarJSONToChar);
}
cJSON_Delete( PetAPIlocalVarJSON);
cJSON_Delete( VarJSON);
//return type
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarQueryParameters);
list_freeList(localVarHeaderType);
free(localVarPath);
return elementToReturn;
end:
free(localVarPath);
return NULL;
}
// Finds Pets by tags
//
// Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
//
list_t*
PetAPI_findPetsByTags(apiClient_t *apiClient, list_t *tags)
{
list_t *localVarQueryParameters = list_createList();
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = list_createList();
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/pet/findByTags")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/pet/findByTags");
// query parameters
if (tags)
{
list_addElement(localVarQueryParameters,tags);
}
list_addElement(localVarHeaderType,"application/xml"); //produces
list_addElement(localVarHeaderType,"application/json"); //produces
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"GET");
// uncomment below to debug the error response
//if (apiClient->response_code == 200) {
// printf("%s\n","successful operation");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 400) {
// printf("%s\n","Invalid tag value");
//}
cJSON *PetAPIlocalVarJSON = cJSON_Parse(apiClient->dataReceived);
if(!cJSON_IsArray(PetAPIlocalVarJSON)) {
return 0;//nonprimitive container
}
list_t *elementToReturn = list_createList();
cJSON *VarJSON;
cJSON_ArrayForEach(VarJSON, PetAPIlocalVarJSON)
{
if(!cJSON_IsObject(VarJSON))
{
// return 0;
}
char *localVarJSONToChar = cJSON_PrintUnformatted(VarJSON);
list_addElement(elementToReturn , localVarJSONToChar);
}
cJSON_Delete( PetAPIlocalVarJSON);
cJSON_Delete( VarJSON);
//return type
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarQueryParameters);
list_freeList(localVarHeaderType);
free(localVarPath);
return elementToReturn;
end:
free(localVarPath);
return NULL;
}
// Find pet by ID
//
// Returns a single pet
//
pet_t*
PetAPI_getPetById(apiClient_t *apiClient, long petId)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = list_createList();
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/pet/{petId}")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/pet/{petId}");
// Path Params
long sizeOfPathParams_petId = sizeof(petId)+3 + strlen("{ petId }");
if(petId == 0){
goto end;
}
char* localVarToReplace_petId = malloc(sizeOfPathParams_petId);
snprintf(localVarToReplace_petId, sizeOfPathParams_petId, "{%s}", "petId");
char localVarBuff_petId[256];
intToStr(localVarBuff_petId, petId);
localVarPath = strReplace(localVarPath, localVarToReplace_petId, localVarBuff_petId);
list_addElement(localVarHeaderType,"application/xml"); //produces
list_addElement(localVarHeaderType,"application/json"); //produces
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"GET");
// uncomment below to debug the error response
//if (apiClient->response_code == 200) {
// printf("%s\n","successful operation");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 400) {
// printf("%s\n","Invalid ID supplied");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 404) {
// printf("%s\n","Pet not found");
//}
//nonprimitive not container
cJSON *PetAPIlocalVarJSON = cJSON_Parse(apiClient->dataReceived);
pet_t *elementToReturn = pet_parseFromJSON(PetAPIlocalVarJSON);
cJSON_Delete(PetAPIlocalVarJSON);
if(elementToReturn == NULL) {
// return 0;
}
//return type
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarHeaderType);
free(localVarPath);
free(localVarToReplace_petId);
return elementToReturn;
end:
free(localVarPath);
return NULL;
}
// Update an existing pet
//
void
PetAPI_updatePet(apiClient_t *apiClient, pet_t *body)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = NULL;
list_t *localVarContentType = list_createList();
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/pet")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/pet");
// Body Param
cJSON *localVarSingleItemJSON_body = NULL;
if (body != NULL)
{
//string
localVarSingleItemJSON_body = pet_convertToJSON(body);
localVarBodyParameters = cJSON_PrintUnformatted(localVarSingleItemJSON_body);
}
list_addElement(localVarContentType,"application/json"); //consumes
list_addElement(localVarContentType,"application/xml"); //consumes
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"PUT");
// uncomment below to debug the error response
//if (apiClient->response_code == 400) {
// printf("%s\n","Invalid ID supplied");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 404) {
// printf("%s\n","Pet not found");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 405) {
// printf("%s\n","Validation exception");
//}
//No return type
end:
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarContentType);
free(localVarPath);
if (localVarSingleItemJSON_body) {
cJSON_Delete(localVarSingleItemJSON_body);
localVarSingleItemJSON_body = NULL;
}
free(localVarBodyParameters);
}
// Updates a pet in the store with form data
//
void
PetAPI_updatePetWithForm(apiClient_t *apiClient, long petId, char *name, char *status)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = list_createList();
list_t *localVarHeaderType = NULL;
list_t *localVarContentType = list_createList();
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/pet/{petId}")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/pet/{petId}");
// Path Params
long sizeOfPathParams_petId = sizeof(petId)+3 + strlen("{ petId }");
if(petId == 0){
goto end;
}
char* localVarToReplace_petId = malloc(sizeOfPathParams_petId);
snprintf(localVarToReplace_petId, sizeOfPathParams_petId, "{%s}", "petId");
char localVarBuff_petId[256];
intToStr(localVarBuff_petId, petId);
localVarPath = strReplace(localVarPath, localVarToReplace_petId, localVarBuff_petId);
// form parameters
char *keyForm_name = NULL;
char * valueForm_name = 0;
keyValuePair_t *keyPairForm_name = 0;
if (name != NULL)
{
keyForm_name = strdup("name");
valueForm_name = strdup((name));
keyPairForm_name = keyValuePair_create(keyForm_name,valueForm_name);
list_addElement(localVarFormParameters,keyPairForm_name);
}
// form parameters
char *keyForm_status = NULL;
char * valueForm_status = 0;
keyValuePair_t *keyPairForm_status = 0;
if (status != NULL)
{
keyForm_status = strdup("status");
valueForm_status = strdup((status));
keyPairForm_status = keyValuePair_create(keyForm_status,valueForm_status);
list_addElement(localVarFormParameters,keyPairForm_status);
}
list_addElement(localVarContentType,"application/x-www-form-urlencoded"); //consumes
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"POST");
// uncomment below to debug the error response
//if (apiClient->response_code == 405) {
// printf("%s\n","Invalid input");
//}
//No return type
end:
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarFormParameters);
list_freeList(localVarContentType);
free(localVarPath);
free(localVarToReplace_petId);
if (keyForm_name) {
free(keyForm_name);
keyForm_name = NULL;
}
if (valueForm_name) {
free(valueForm_name);
valueForm_name = NULL;
}
keyValuePair_free(keyPairForm_name);
if (keyForm_status) {
free(keyForm_status);
keyForm_status = NULL;
}
if (valueForm_status) {
free(valueForm_status);
valueForm_status = NULL;
}
keyValuePair_free(keyPairForm_status);
}
// uploads an image
//
api_response_t*
PetAPI_uploadFile(apiClient_t *apiClient, long petId, char *additionalMetadata, binary_t* file)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = list_createList();
list_t *localVarHeaderType = list_createList();
list_t *localVarContentType = list_createList();
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/pet/{petId}/uploadImage")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/pet/{petId}/uploadImage");
// Path Params
long sizeOfPathParams_petId = sizeof(petId)+3 + strlen("{ petId }");
if(petId == 0){
goto end;
}
char* localVarToReplace_petId = malloc(sizeOfPathParams_petId);
snprintf(localVarToReplace_petId, sizeOfPathParams_petId, "{%s}", "petId");
char localVarBuff_petId[256];
intToStr(localVarBuff_petId, petId);
localVarPath = strReplace(localVarPath, localVarToReplace_petId, localVarBuff_petId);
// form parameters
char *keyForm_additionalMetadata = NULL;
char * valueForm_additionalMetadata = 0;
keyValuePair_t *keyPairForm_additionalMetadata = 0;
if (additionalMetadata != NULL)
{
keyForm_additionalMetadata = strdup("additionalMetadata");
valueForm_additionalMetadata = strdup((additionalMetadata));
keyPairForm_additionalMetadata = keyValuePair_create(keyForm_additionalMetadata,valueForm_additionalMetadata);
list_addElement(localVarFormParameters,keyPairForm_additionalMetadata);
}
// form parameters
char *keyForm_file = NULL;
binary_t* valueForm_file = 0;
keyValuePair_t *keyPairForm_file = 0;
if (file != NULL)
{
keyForm_file = strdup("file");
valueForm_file = file;
keyPairForm_file = keyValuePair_create(keyForm_file, &valueForm_file);
list_addElement(localVarFormParameters,keyPairForm_file); //file adding
}
list_addElement(localVarHeaderType,"application/json"); //produces
list_addElement(localVarContentType,"multipart/form-data"); //consumes
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"POST");
// uncomment below to debug the error response
//if (apiClient->response_code == 200) {
// printf("%s\n","successful operation");
//}
//nonprimitive not container
cJSON *PetAPIlocalVarJSON = cJSON_Parse(apiClient->dataReceived);
api_response_t *elementToReturn = api_response_parseFromJSON(PetAPIlocalVarJSON);
cJSON_Delete(PetAPIlocalVarJSON);
if(elementToReturn == NULL) {
// return 0;
}
//return type
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarFormParameters);
list_freeList(localVarHeaderType);
list_freeList(localVarContentType);
free(localVarPath);
free(localVarToReplace_petId);
if (keyForm_additionalMetadata) {
free(keyForm_additionalMetadata);
keyForm_additionalMetadata = NULL;
}
if (valueForm_additionalMetadata) {
free(valueForm_additionalMetadata);
valueForm_additionalMetadata = NULL;
}
free(keyPairForm_additionalMetadata);
if (keyForm_file) {
free(keyForm_file);
keyForm_file = NULL;
}
// free(fileVar_file->data);
// free(fileVar_file);
free(keyPairForm_file);
return elementToReturn;
end:
free(localVarPath);
return NULL;
}

View File

@ -0,0 +1,68 @@
#include <stdlib.h>
#include <stdio.h>
#include "../include/apiClient.h"
#include "../include/list.h"
#include "../external/cJSON.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
#include "../model/api_response.h"
#include "../model/pet.h"
// Enum STATUS for PetAPI_findPetsByStatus
typedef enum { openapi_petstore_findPetsByStatus_STATUS_NULL = 0, openapi_petstore_findPetsByStatus_STATUS_available, openapi_petstore_findPetsByStatus_STATUS_pending, openapi_petstore_findPetsByStatus_STATUS_sold } openapi_petstore_findPetsByStatus_status_e;
// Add a new pet to the store
//
void
PetAPI_addPet(apiClient_t *apiClient, pet_t *body);
// Deletes a pet
//
void
PetAPI_deletePet(apiClient_t *apiClient, long petId, char *api_key);
// Finds Pets by status
//
// Multiple status values can be provided with comma separated strings
//
list_t*
PetAPI_findPetsByStatus(apiClient_t *apiClient, list_t *status);
// Finds Pets by tags
//
// Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
//
list_t*
PetAPI_findPetsByTags(apiClient_t *apiClient, list_t *tags);
// Find pet by ID
//
// Returns a single pet
//
pet_t*
PetAPI_getPetById(apiClient_t *apiClient, long petId);
// Update an existing pet
//
void
PetAPI_updatePet(apiClient_t *apiClient, pet_t *body);
// Updates a pet in the store with form data
//
void
PetAPI_updatePetWithForm(apiClient_t *apiClient, long petId, char *name, char *status);
// uploads an image
//
api_response_t*
PetAPI_uploadFile(apiClient_t *apiClient, long petId, char *additionalMetadata, binary_t* file);

View File

@ -0,0 +1,311 @@
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include "StoreAPI.h"
#define MAX_NUMBER_LENGTH 16
#define MAX_BUFFER_LENGTH 4096
#define intToStr(dst, src) \
do {\
char dst[256];\
snprintf(dst, 256, "%ld", (long int)(src));\
}while(0)
// Delete purchase order by ID
//
// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
//
void
StoreAPI_deleteOrder(apiClient_t *apiClient, char *orderId)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = NULL;
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/store/order/{orderId}")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/store/order/{orderId}");
// Path Params
long sizeOfPathParams_orderId = strlen(orderId)+3 + strlen("{ orderId }");
if(orderId == NULL) {
goto end;
}
char* localVarToReplace_orderId = malloc(sizeOfPathParams_orderId);
sprintf(localVarToReplace_orderId, "{%s}", "orderId");
localVarPath = strReplace(localVarPath, localVarToReplace_orderId, orderId);
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"DELETE");
// uncomment below to debug the error response
//if (apiClient->response_code == 400) {
// printf("%s\n","Invalid ID supplied");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 404) {
// printf("%s\n","Order not found");
//}
//No return type
end:
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
free(localVarPath);
free(localVarToReplace_orderId);
}
// Returns pet inventories by status
//
// Returns a map of status codes to quantities
//
list_t*
StoreAPI_getInventory(apiClient_t *apiClient)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = list_createList();
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/store/inventory")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/store/inventory");
list_addElement(localVarHeaderType,"application/json"); //produces
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"GET");
// uncomment below to debug the error response
//if (apiClient->response_code == 200) {
// printf("%s\n","successful operation");
//}
//primitive return type not simple
cJSON *localVarJSON = cJSON_Parse(apiClient->dataReceived);
cJSON *VarJSON;
list_t *elementToReturn = list_createList();
cJSON_ArrayForEach(VarJSON, localVarJSON){
keyValuePair_t *keyPair = keyValuePair_create(strdup(VarJSON->string), cJSON_PrintUnformatted(VarJSON));
list_addElement(elementToReturn, keyPair);
}
cJSON_Delete(localVarJSON);
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarHeaderType);
free(localVarPath);
return elementToReturn;
end:
free(localVarPath);
return NULL;
}
// Find purchase order by ID
//
// For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions
//
order_t*
StoreAPI_getOrderById(apiClient_t *apiClient, long orderId)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = list_createList();
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/store/order/{orderId}")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/store/order/{orderId}");
// Path Params
long sizeOfPathParams_orderId = sizeof(orderId)+3 + strlen("{ orderId }");
if(orderId == 0){
goto end;
}
char* localVarToReplace_orderId = malloc(sizeOfPathParams_orderId);
snprintf(localVarToReplace_orderId, sizeOfPathParams_orderId, "{%s}", "orderId");
char localVarBuff_orderId[256];
intToStr(localVarBuff_orderId, orderId);
localVarPath = strReplace(localVarPath, localVarToReplace_orderId, localVarBuff_orderId);
list_addElement(localVarHeaderType,"application/xml"); //produces
list_addElement(localVarHeaderType,"application/json"); //produces
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"GET");
// uncomment below to debug the error response
//if (apiClient->response_code == 200) {
// printf("%s\n","successful operation");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 400) {
// printf("%s\n","Invalid ID supplied");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 404) {
// printf("%s\n","Order not found");
//}
//nonprimitive not container
cJSON *StoreAPIlocalVarJSON = cJSON_Parse(apiClient->dataReceived);
order_t *elementToReturn = order_parseFromJSON(StoreAPIlocalVarJSON);
cJSON_Delete(StoreAPIlocalVarJSON);
if(elementToReturn == NULL) {
// return 0;
}
//return type
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarHeaderType);
free(localVarPath);
free(localVarToReplace_orderId);
return elementToReturn;
end:
free(localVarPath);
return NULL;
}
// Place an order for a pet
//
order_t*
StoreAPI_placeOrder(apiClient_t *apiClient, order_t *body)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = list_createList();
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/store/order")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/store/order");
// Body Param
cJSON *localVarSingleItemJSON_body = NULL;
if (body != NULL)
{
//string
localVarSingleItemJSON_body = order_convertToJSON(body);
localVarBodyParameters = cJSON_PrintUnformatted(localVarSingleItemJSON_body);
}
list_addElement(localVarHeaderType,"application/xml"); //produces
list_addElement(localVarHeaderType,"application/json"); //produces
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"POST");
// uncomment below to debug the error response
//if (apiClient->response_code == 200) {
// printf("%s\n","successful operation");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 400) {
// printf("%s\n","Invalid Order");
//}
//nonprimitive not container
cJSON *StoreAPIlocalVarJSON = cJSON_Parse(apiClient->dataReceived);
order_t *elementToReturn = order_parseFromJSON(StoreAPIlocalVarJSON);
cJSON_Delete(StoreAPIlocalVarJSON);
if(elementToReturn == NULL) {
// return 0;
}
//return type
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarHeaderType);
free(localVarPath);
if (localVarSingleItemJSON_body) {
cJSON_Delete(localVarSingleItemJSON_body);
localVarSingleItemJSON_body = NULL;
}
free(localVarBodyParameters);
return elementToReturn;
end:
free(localVarPath);
return NULL;
}

View File

@ -0,0 +1,40 @@
#include <stdlib.h>
#include <stdio.h>
#include "../include/apiClient.h"
#include "../include/list.h"
#include "../external/cJSON.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
#include "../model/order.h"
// Delete purchase order by ID
//
// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
//
void
StoreAPI_deleteOrder(apiClient_t *apiClient, char *orderId);
// Returns pet inventories by status
//
// Returns a map of status codes to quantities
//
list_t*
StoreAPI_getInventory(apiClient_t *apiClient);
// Find purchase order by ID
//
// For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions
//
order_t*
StoreAPI_getOrderById(apiClient_t *apiClient, long orderId);
// Place an order for a pet
//
order_t*
StoreAPI_placeOrder(apiClient_t *apiClient, order_t *body);

View File

@ -0,0 +1,722 @@
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include "UserAPI.h"
#define MAX_NUMBER_LENGTH 16
#define MAX_BUFFER_LENGTH 4096
#define intToStr(dst, src) \
do {\
char dst[256];\
snprintf(dst, 256, "%ld", (long int)(src));\
}while(0)
// Create user
//
// This can only be done by the logged in user.
//
void
UserAPI_createUser(apiClient_t *apiClient, user_t *body)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = NULL;
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/user")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/user");
// Body Param
cJSON *localVarSingleItemJSON_body = NULL;
if (body != NULL)
{
//string
localVarSingleItemJSON_body = user_convertToJSON(body);
localVarBodyParameters = cJSON_PrintUnformatted(localVarSingleItemJSON_body);
}
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"POST");
// uncomment below to debug the error response
//if (apiClient->response_code == 0) {
// printf("%s\n","successful operation");
//}
//No return type
end:
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
free(localVarPath);
if (localVarSingleItemJSON_body) {
cJSON_Delete(localVarSingleItemJSON_body);
localVarSingleItemJSON_body = NULL;
}
free(localVarBodyParameters);
}
// Creates list of users with given input array
//
void
UserAPI_createUsersWithArrayInput(apiClient_t *apiClient, list_t *body)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = NULL;
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/user/createWithArray")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/user/createWithArray");
// Body Param
//notstring
cJSON *localVar_body = NULL;
cJSON *localVarItemJSON_body = NULL;
cJSON *localVarSingleItemJSON_body = NULL;
if (body != NULL)
{
localVarItemJSON_body = cJSON_CreateObject();
localVarSingleItemJSON_body = cJSON_AddArrayToObject(localVarItemJSON_body, "body");
if (localVarSingleItemJSON_body == NULL)
{
// nonprimitive container
goto end;
}
}
listEntry_t *bodyBodyListEntry;
list_ForEach(bodyBodyListEntry, body)
{
localVar_body = user_convertToJSON(bodyBodyListEntry->data);
if(localVar_body == NULL)
{
goto end;
}
cJSON_AddItemToArray(localVarSingleItemJSON_body, localVar_body);
localVarBodyParameters = cJSON_PrintUnformatted(localVarItemJSON_body);
}
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"POST");
// uncomment below to debug the error response
//if (apiClient->response_code == 0) {
// printf("%s\n","successful operation");
//}
//No return type
end:
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
free(localVarPath);
if (localVarItemJSON_body) {
cJSON_Delete(localVarItemJSON_body);
localVarItemJSON_body = NULL;
}
if (localVarSingleItemJSON_body) {
cJSON_Delete(localVarSingleItemJSON_body);
localVarSingleItemJSON_body = NULL;
}
if (localVar_body) {
cJSON_Delete(localVar_body);
localVar_body = NULL;
}
free(localVarBodyParameters);
}
// Creates list of users with given input array
//
void
UserAPI_createUsersWithListInput(apiClient_t *apiClient, list_t *body)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = NULL;
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/user/createWithList")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/user/createWithList");
// Body Param
//notstring
cJSON *localVar_body = NULL;
cJSON *localVarItemJSON_body = NULL;
cJSON *localVarSingleItemJSON_body = NULL;
if (body != NULL)
{
localVarItemJSON_body = cJSON_CreateObject();
localVarSingleItemJSON_body = cJSON_AddArrayToObject(localVarItemJSON_body, "body");
if (localVarSingleItemJSON_body == NULL)
{
// nonprimitive container
goto end;
}
}
listEntry_t *bodyBodyListEntry;
list_ForEach(bodyBodyListEntry, body)
{
localVar_body = user_convertToJSON(bodyBodyListEntry->data);
if(localVar_body == NULL)
{
goto end;
}
cJSON_AddItemToArray(localVarSingleItemJSON_body, localVar_body);
localVarBodyParameters = cJSON_PrintUnformatted(localVarItemJSON_body);
}
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"POST");
// uncomment below to debug the error response
//if (apiClient->response_code == 0) {
// printf("%s\n","successful operation");
//}
//No return type
end:
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
free(localVarPath);
if (localVarItemJSON_body) {
cJSON_Delete(localVarItemJSON_body);
localVarItemJSON_body = NULL;
}
if (localVarSingleItemJSON_body) {
cJSON_Delete(localVarSingleItemJSON_body);
localVarSingleItemJSON_body = NULL;
}
if (localVar_body) {
cJSON_Delete(localVar_body);
localVar_body = NULL;
}
free(localVarBodyParameters);
}
// Delete user
//
// This can only be done by the logged in user.
//
void
UserAPI_deleteUser(apiClient_t *apiClient, char *username)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = NULL;
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/user/{username}")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/user/{username}");
// Path Params
long sizeOfPathParams_username = strlen(username)+3 + strlen("{ username }");
if(username == NULL) {
goto end;
}
char* localVarToReplace_username = malloc(sizeOfPathParams_username);
sprintf(localVarToReplace_username, "{%s}", "username");
localVarPath = strReplace(localVarPath, localVarToReplace_username, username);
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"DELETE");
// uncomment below to debug the error response
//if (apiClient->response_code == 400) {
// printf("%s\n","Invalid username supplied");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 404) {
// printf("%s\n","User not found");
//}
//No return type
end:
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
free(localVarPath);
free(localVarToReplace_username);
}
// Get user by user name
//
user_t*
UserAPI_getUserByName(apiClient_t *apiClient, char *username)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = list_createList();
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/user/{username}")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/user/{username}");
// Path Params
long sizeOfPathParams_username = strlen(username)+3 + strlen("{ username }");
if(username == NULL) {
goto end;
}
char* localVarToReplace_username = malloc(sizeOfPathParams_username);
sprintf(localVarToReplace_username, "{%s}", "username");
localVarPath = strReplace(localVarPath, localVarToReplace_username, username);
list_addElement(localVarHeaderType,"application/xml"); //produces
list_addElement(localVarHeaderType,"application/json"); //produces
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"GET");
// uncomment below to debug the error response
//if (apiClient->response_code == 200) {
// printf("%s\n","successful operation");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 400) {
// printf("%s\n","Invalid username supplied");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 404) {
// printf("%s\n","User not found");
//}
//nonprimitive not container
cJSON *UserAPIlocalVarJSON = cJSON_Parse(apiClient->dataReceived);
user_t *elementToReturn = user_parseFromJSON(UserAPIlocalVarJSON);
cJSON_Delete(UserAPIlocalVarJSON);
if(elementToReturn == NULL) {
// return 0;
}
//return type
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarHeaderType);
free(localVarPath);
free(localVarToReplace_username);
return elementToReturn;
end:
free(localVarPath);
return NULL;
}
// Logs user into the system
//
char*
UserAPI_loginUser(apiClient_t *apiClient, char *username, char *password)
{
list_t *localVarQueryParameters = list_createList();
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = list_createList();
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/user/login")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/user/login");
// query parameters
char *keyQuery_username = NULL;
char * valueQuery_username = NULL;
keyValuePair_t *keyPairQuery_username = 0;
if (username)
{
keyQuery_username = strdup("username");
valueQuery_username = strdup((username));
keyPairQuery_username = keyValuePair_create(keyQuery_username, valueQuery_username);
list_addElement(localVarQueryParameters,keyPairQuery_username);
}
// query parameters
char *keyQuery_password = NULL;
char * valueQuery_password = NULL;
keyValuePair_t *keyPairQuery_password = 0;
if (password)
{
keyQuery_password = strdup("password");
valueQuery_password = strdup((password));
keyPairQuery_password = keyValuePair_create(keyQuery_password, valueQuery_password);
list_addElement(localVarQueryParameters,keyPairQuery_password);
}
list_addElement(localVarHeaderType,"application/xml"); //produces
list_addElement(localVarHeaderType,"application/json"); //produces
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"GET");
// uncomment below to debug the error response
//if (apiClient->response_code == 200) {
// printf("%s\n","successful operation");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 400) {
// printf("%s\n","Invalid username/password supplied");
//}
//primitive return type simple
char* elementToReturn = strdup((char*)apiClient->dataReceived);
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarQueryParameters);
list_freeList(localVarHeaderType);
free(localVarPath);
if(keyQuery_username){
free(keyQuery_username);
keyQuery_username = NULL;
}
if(valueQuery_username){
free(valueQuery_username);
valueQuery_username = NULL;
}
if(keyPairQuery_username){
keyValuePair_free(keyPairQuery_username);
keyPairQuery_username = NULL;
}
if(keyQuery_password){
free(keyQuery_password);
keyQuery_password = NULL;
}
if(valueQuery_password){
free(valueQuery_password);
valueQuery_password = NULL;
}
if(keyPairQuery_password){
keyValuePair_free(keyPairQuery_password);
keyPairQuery_password = NULL;
}
return elementToReturn;
end:
free(localVarPath);
return NULL;
}
// Logs out current logged in user session
//
void
UserAPI_logoutUser(apiClient_t *apiClient)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = NULL;
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/user/logout")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/user/logout");
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"GET");
// uncomment below to debug the error response
//if (apiClient->response_code == 0) {
// printf("%s\n","successful operation");
//}
//No return type
end:
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
free(localVarPath);
}
// test integer and boolean query parameters in API
//
// This can test integer and boolean query parameters in API.
//
void
UserAPI_testIntAndBool(apiClient_t *apiClient, int *keep, int *keepDay)
{
list_t *localVarQueryParameters = list_createList();
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = NULL;
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/user/testIntAndBool")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/user/testIntAndBool");
// query parameters
char *keyQuery_keep = NULL;
char * valueQuery_keep = NULL;
keyValuePair_t *keyPairQuery_keep = 0;
if (keep)
{
keyQuery_keep = strdup("keep");
valueQuery_keep = calloc(1,MAX_NUMBER_LENGTH);
snprintf(valueQuery_keep, MAX_NUMBER_LENGTH, "%d", *keep);
keyPairQuery_keep = keyValuePair_create(keyQuery_keep, valueQuery_keep);
list_addElement(localVarQueryParameters,keyPairQuery_keep);
}
// query parameters
char *keyQuery_keepDay = NULL;
char * valueQuery_keepDay = NULL;
keyValuePair_t *keyPairQuery_keepDay = 0;
if (keepDay)
{
keyQuery_keepDay = strdup("keepDay");
valueQuery_keepDay = calloc(1,MAX_NUMBER_LENGTH);
snprintf(valueQuery_keepDay, MAX_NUMBER_LENGTH, "%d", *keepDay);
keyPairQuery_keepDay = keyValuePair_create(keyQuery_keepDay, valueQuery_keepDay);
list_addElement(localVarQueryParameters,keyPairQuery_keepDay);
}
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"GET");
// uncomment below to debug the error response
//if (apiClient->response_code == 200) {
// printf("%s\n","successful operation");
//}
//No return type
end:
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
list_freeList(localVarQueryParameters);
free(localVarPath);
}
// Updated user
//
// This can only be done by the logged in user.
//
void
UserAPI_updateUser(apiClient_t *apiClient, char *username, user_t *body)
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
list_t *localVarFormParameters = NULL;
list_t *localVarHeaderType = NULL;
list_t *localVarContentType = NULL;
char *localVarBodyParameters = NULL;
// create the path
long sizeOfPath = strlen("/user/{username}")+1;
char *localVarPath = malloc(sizeOfPath);
snprintf(localVarPath, sizeOfPath, "/user/{username}");
// Path Params
long sizeOfPathParams_username = strlen(username)+3 + strlen("{ username }");
if(username == NULL) {
goto end;
}
char* localVarToReplace_username = malloc(sizeOfPathParams_username);
sprintf(localVarToReplace_username, "{%s}", "username");
localVarPath = strReplace(localVarPath, localVarToReplace_username, username);
// Body Param
cJSON *localVarSingleItemJSON_body = NULL;
if (body != NULL)
{
//string
localVarSingleItemJSON_body = user_convertToJSON(body);
localVarBodyParameters = cJSON_PrintUnformatted(localVarSingleItemJSON_body);
}
apiClient_invoke(apiClient,
localVarPath,
localVarQueryParameters,
localVarHeaderParameters,
localVarFormParameters,
localVarHeaderType,
localVarContentType,
localVarBodyParameters,
"PUT");
// uncomment below to debug the error response
//if (apiClient->response_code == 400) {
// printf("%s\n","Invalid user supplied");
//}
// uncomment below to debug the error response
//if (apiClient->response_code == 404) {
// printf("%s\n","User not found");
//}
//No return type
end:
if (apiClient->dataReceived) {
free(apiClient->dataReceived);
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
}
free(localVarPath);
free(localVarToReplace_username);
if (localVarSingleItemJSON_body) {
cJSON_Delete(localVarSingleItemJSON_body);
localVarSingleItemJSON_body = NULL;
}
free(localVarBodyParameters);
}

View File

@ -0,0 +1,72 @@
#include <stdlib.h>
#include <stdio.h>
#include "../include/apiClient.h"
#include "../include/list.h"
#include "../external/cJSON.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
#include "../model/user.h"
// Create user
//
// This can only be done by the logged in user.
//
void
UserAPI_createUser(apiClient_t *apiClient, user_t *body);
// Creates list of users with given input array
//
void
UserAPI_createUsersWithArrayInput(apiClient_t *apiClient, list_t *body);
// Creates list of users with given input array
//
void
UserAPI_createUsersWithListInput(apiClient_t *apiClient, list_t *body);
// Delete user
//
// This can only be done by the logged in user.
//
void
UserAPI_deleteUser(apiClient_t *apiClient, char *username);
// Get user by user name
//
user_t*
UserAPI_getUserByName(apiClient_t *apiClient, char *username);
// Logs user into the system
//
char*
UserAPI_loginUser(apiClient_t *apiClient, char *username, char *password);
// Logs out current logged in user session
//
void
UserAPI_logoutUser(apiClient_t *apiClient);
// test integer and boolean query parameters in API
//
// This can test integer and boolean query parameters in API.
//
void
UserAPI_testIntAndBool(apiClient_t *apiClient, int *keep, int *keepDay);
// Updated user
//
// This can only be done by the logged in user.
//
void
UserAPI_updateUser(apiClient_t *apiClient, char *username, user_t *body);

View File

@ -0,0 +1,11 @@
# MappedModel_t
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**another_property** | **int** | | [optional]
**uuid_property** | **char \*** | | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -0,0 +1,255 @@
# PetAPI
All URIs are relative to *http://petstore.swagger.io/v2*
Method | HTTP request | Description
------------- | ------------- | -------------
[**PetAPI_addPet**](PetAPI.md#PetAPI_addPet) | **POST** /pet | Add a new pet to the store
[**PetAPI_deletePet**](PetAPI.md#PetAPI_deletePet) | **DELETE** /pet/{petId} | Deletes a pet
[**PetAPI_findPetsByStatus**](PetAPI.md#PetAPI_findPetsByStatus) | **GET** /pet/findByStatus | Finds Pets by status
[**PetAPI_findPetsByTags**](PetAPI.md#PetAPI_findPetsByTags) | **GET** /pet/findByTags | Finds Pets by tags
[**PetAPI_getPetById**](PetAPI.md#PetAPI_getPetById) | **GET** /pet/{petId} | Find pet by ID
[**PetAPI_updatePet**](PetAPI.md#PetAPI_updatePet) | **PUT** /pet | Update an existing pet
[**PetAPI_updatePetWithForm**](PetAPI.md#PetAPI_updatePetWithForm) | **POST** /pet/{petId} | Updates a pet in the store with form data
[**PetAPI_uploadFile**](PetAPI.md#PetAPI_uploadFile) | **POST** /pet/{petId}/uploadImage | uploads an image
# **PetAPI_addPet**
```c
// Add a new pet to the store
//
void PetAPI_addPet(apiClient_t *apiClient, pet_t *body);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**body** | **[pet_t](pet.md) \*** | Pet object that needs to be added to the store |
### Return type
void
### Authorization
[petstore_auth](../README.md#petstore_auth)
### HTTP request headers
- **Content-Type**: application/json, application/xml
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **PetAPI_deletePet**
```c
// Deletes a pet
//
void PetAPI_deletePet(apiClient_t *apiClient, long petId, char *api_key);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**petId** | **long** | Pet id to delete |
**api_key** | **char \*** | | [optional]
### Return type
void
### Authorization
[petstore_auth](../README.md#petstore_auth)
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **PetAPI_findPetsByStatus**
```c
// Finds Pets by status
//
// Multiple status values can be provided with comma separated strings
//
list_t* PetAPI_findPetsByStatus(apiClient_t *apiClient, list_t *status);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**status** | **[list_t](char.md) \*** | Status values that need to be considered for filter |
### Return type
[list_t](pet.md) *
### Authorization
[petstore_auth](../README.md#petstore_auth)
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: application/xml, application/json
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **PetAPI_findPetsByTags**
```c
// Finds Pets by tags
//
// Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
//
list_t* PetAPI_findPetsByTags(apiClient_t *apiClient, list_t *tags);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**tags** | **[list_t](char.md) \*** | Tags to filter by |
### Return type
[list_t](pet.md) *
### Authorization
[petstore_auth](../README.md#petstore_auth)
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: application/xml, application/json
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **PetAPI_getPetById**
```c
// Find pet by ID
//
// Returns a single pet
//
pet_t* PetAPI_getPetById(apiClient_t *apiClient, long petId);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**petId** | **long** | ID of pet to return |
### Return type
[pet_t](pet.md) *
### Authorization
[api_key](../README.md#api_key)
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: application/xml, application/json
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **PetAPI_updatePet**
```c
// Update an existing pet
//
void PetAPI_updatePet(apiClient_t *apiClient, pet_t *body);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**body** | **[pet_t](pet.md) \*** | Pet object that needs to be added to the store |
### Return type
void
### Authorization
[petstore_auth](../README.md#petstore_auth)
### HTTP request headers
- **Content-Type**: application/json, application/xml
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **PetAPI_updatePetWithForm**
```c
// Updates a pet in the store with form data
//
void PetAPI_updatePetWithForm(apiClient_t *apiClient, long petId, char *name, char *status);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**petId** | **long** | ID of pet that needs to be updated |
**name** | **char \*** | Updated name of the pet | [optional]
**status** | **char \*** | Updated status of the pet | [optional]
### Return type
void
### Authorization
[petstore_auth](../README.md#petstore_auth)
### HTTP request headers
- **Content-Type**: application/x-www-form-urlencoded
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **PetAPI_uploadFile**
```c
// uploads an image
//
api_response_t* PetAPI_uploadFile(apiClient_t *apiClient, long petId, char *additionalMetadata, binary_t* file);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**petId** | **long** | ID of pet to update |
**additionalMetadata** | **char \*** | Additional data to pass to server | [optional]
**file** | **binary_t*** | file to upload | [optional]
### Return type
[api_response_t](api_response.md) *
### Authorization
[petstore_auth](../README.md#petstore_auth)
### HTTP request headers
- **Content-Type**: multipart/form-data
- **Accept**: application/json
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)

View File

@ -0,0 +1,135 @@
# StoreAPI
All URIs are relative to *http://petstore.swagger.io/v2*
Method | HTTP request | Description
------------- | ------------- | -------------
[**StoreAPI_deleteOrder**](StoreAPI.md#StoreAPI_deleteOrder) | **DELETE** /store/order/{orderId} | Delete purchase order by ID
[**StoreAPI_getInventory**](StoreAPI.md#StoreAPI_getInventory) | **GET** /store/inventory | Returns pet inventories by status
[**StoreAPI_getOrderById**](StoreAPI.md#StoreAPI_getOrderById) | **GET** /store/order/{orderId} | Find purchase order by ID
[**StoreAPI_placeOrder**](StoreAPI.md#StoreAPI_placeOrder) | **POST** /store/order | Place an order for a pet
# **StoreAPI_deleteOrder**
```c
// Delete purchase order by ID
//
// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
//
void StoreAPI_deleteOrder(apiClient_t *apiClient, char *orderId);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**orderId** | **char \*** | ID of the order that needs to be deleted |
### Return type
void
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **StoreAPI_getInventory**
```c
// Returns pet inventories by status
//
// Returns a map of status codes to quantities
//
list_t* StoreAPI_getInventory(apiClient_t *apiClient);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
### Return type
list_t*
### Authorization
[api_key](../README.md#api_key)
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: application/json
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **StoreAPI_getOrderById**
```c
// Find purchase order by ID
//
// For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions
//
order_t* StoreAPI_getOrderById(apiClient_t *apiClient, long orderId);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**orderId** | **long** | ID of pet that needs to be fetched |
### Return type
[order_t](order.md) *
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: application/xml, application/json
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **StoreAPI_placeOrder**
```c
// Place an order for a pet
//
order_t* StoreAPI_placeOrder(apiClient_t *apiClient, order_t *body);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**body** | **[order_t](order.md) \*** | order placed for purchasing the pet |
### Return type
[order_t](order.md) *
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: application/xml, application/json
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)

View File

@ -0,0 +1,282 @@
# UserAPI
All URIs are relative to *http://petstore.swagger.io/v2*
Method | HTTP request | Description
------------- | ------------- | -------------
[**UserAPI_createUser**](UserAPI.md#UserAPI_createUser) | **POST** /user | Create user
[**UserAPI_createUsersWithArrayInput**](UserAPI.md#UserAPI_createUsersWithArrayInput) | **POST** /user/createWithArray | Creates list of users with given input array
[**UserAPI_createUsersWithListInput**](UserAPI.md#UserAPI_createUsersWithListInput) | **POST** /user/createWithList | Creates list of users with given input array
[**UserAPI_deleteUser**](UserAPI.md#UserAPI_deleteUser) | **DELETE** /user/{username} | Delete user
[**UserAPI_getUserByName**](UserAPI.md#UserAPI_getUserByName) | **GET** /user/{username} | Get user by user name
[**UserAPI_loginUser**](UserAPI.md#UserAPI_loginUser) | **GET** /user/login | Logs user into the system
[**UserAPI_logoutUser**](UserAPI.md#UserAPI_logoutUser) | **GET** /user/logout | Logs out current logged in user session
[**UserAPI_testIntAndBool**](UserAPI.md#UserAPI_testIntAndBool) | **GET** /user/testIntAndBool | test integer and boolean query parameters in API
[**UserAPI_updateUser**](UserAPI.md#UserAPI_updateUser) | **PUT** /user/{username} | Updated user
# **UserAPI_createUser**
```c
// Create user
//
// This can only be done by the logged in user.
//
void UserAPI_createUser(apiClient_t *apiClient, user_t *body);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**body** | **[user_t](user.md) \*** | Created user object |
### Return type
void
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **UserAPI_createUsersWithArrayInput**
```c
// Creates list of users with given input array
//
void UserAPI_createUsersWithArrayInput(apiClient_t *apiClient, list_t *body);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**body** | **[list_t](user.md) \*** | List of user object |
### Return type
void
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **UserAPI_createUsersWithListInput**
```c
// Creates list of users with given input array
//
void UserAPI_createUsersWithListInput(apiClient_t *apiClient, list_t *body);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**body** | **[list_t](user.md) \*** | List of user object |
### Return type
void
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **UserAPI_deleteUser**
```c
// Delete user
//
// This can only be done by the logged in user.
//
void UserAPI_deleteUser(apiClient_t *apiClient, char *username);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**username** | **char \*** | The name that needs to be deleted |
### Return type
void
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **UserAPI_getUserByName**
```c
// Get user by user name
//
user_t* UserAPI_getUserByName(apiClient_t *apiClient, char *username);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**username** | **char \*** | The name that needs to be fetched. Use user1 for testing. |
### Return type
[user_t](user.md) *
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: application/xml, application/json
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **UserAPI_loginUser**
```c
// Logs user into the system
//
char* UserAPI_loginUser(apiClient_t *apiClient, char *username, char *password);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**username** | **char \*** | The user name for login |
**password** | **char \*** | The password for login in clear text |
### Return type
char*
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: application/xml, application/json
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **UserAPI_logoutUser**
```c
// Logs out current logged in user session
//
void UserAPI_logoutUser(apiClient_t *apiClient);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
### Return type
void
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **UserAPI_testIntAndBool**
```c
// test integer and boolean query parameters in API
//
// This can test integer and boolean query parameters in API.
//
void UserAPI_testIntAndBool(apiClient_t *apiClient, int *keep, int *keepDay);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**keep** | **int \*** | Whether to keep user data after deletion | [optional]
**keepDay** | **int \*** | how many days user data is kept after deletion | [optional]
### Return type
void
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **UserAPI_updateUser**
```c
// Updated user
//
// This can only be done by the logged in user.
//
void UserAPI_updateUser(apiClient_t *apiClient, char *username, user_t *body);
```
### Parameters
Name | Type | Description | Notes
------------- | ------------- | ------------- | -------------
**apiClient** | **apiClient_t \*** | context containing the client configuration |
**username** | **char \*** | name that need to be deleted |
**body** | **[user_t](user.md) \*** | Updated user object |
### Return type
void
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: Not defined
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)

View File

@ -0,0 +1,12 @@
# api_response_t
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**code** | **int** | | [optional]
**type** | **char \*** | | [optional]
**message** | **char \*** | | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -0,0 +1,11 @@
# category_t
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**id** | **long** | | [optional]
**name** | **char \*** | | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -0,0 +1,11 @@
# model_with_set_propertes_t
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**tag_set** | [**list_t**](tag.md) \* | | [optional]
**string_set** | **list_t \*** | | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -0,0 +1,15 @@
# order_t
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**id** | **long** | | [optional]
**pet_id** | **long** | | [optional]
**quantity** | **int** | | [optional]
**ship_date** | **char \*** | | [optional]
**status** | **openapi_petstore_order_STATUS_e** | Order Status | [optional]
**complete** | **int** | | [optional] [default to false]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -0,0 +1,15 @@
# pet_t
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**id** | **long** | | [optional]
**category** | [**category_t**](category.md) \* | | [optional]
**name** | **char \*** | |
**photo_urls** | **list_t \*** | |
**tags** | [**list_t**](tag.md) \* | | [optional]
**status** | **openapi_petstore_pet_STATUS_e** | pet status in the store | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -0,0 +1,11 @@
# tag_t
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**id** | **long** | | [optional]
**name** | **char \*** | | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@ -0,0 +1,17 @@
# user_t
## Properties
Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------
**id** | **long** | | [optional]
**username** | **char \*** | | [optional]
**first_name** | **char \*** | | [optional]
**last_name** | **char \*** | | [optional]
**email** | **char \*** | | [optional]
**password** | **char \*** | | [optional]
**phone** | **char \*** | | [optional]
**user_status** | **int** | User Status | [optional]
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,277 @@
/*
Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#ifndef cJSON__h
#define cJSON__h
#ifdef __cplusplus
extern "C"
{
#endif
/* project version */
#define CJSON_VERSION_MAJOR 1
#define CJSON_VERSION_MINOR 7
#define CJSON_VERSION_PATCH 7
#include <stddef.h>
/* cJSON Types: */
#define cJSON_Invalid (0)
#define cJSON_False (1 << 0)
#define cJSON_True (1 << 1)
#define cJSON_NULL (1 << 2)
#define cJSON_Number (1 << 3)
#define cJSON_String (1 << 4)
#define cJSON_Array (1 << 5)
#define cJSON_Object (1 << 6)
#define cJSON_Raw (1 << 7) /* raw json */
#define cJSON_IsReference 256
#define cJSON_StringIsConst 512
/* The cJSON structure: */
typedef struct cJSON
{
/* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
struct cJSON *next;
struct cJSON *prev;
/* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
struct cJSON *child;
/* The type of the item, as above. */
int type;
/* The item's string, if type==cJSON_String and type == cJSON_Raw */
char *valuestring;
/* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */
int valueint;
/* The item's number, if type==cJSON_Number */
double valuedouble;
/* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
char *string;
} cJSON;
typedef struct cJSON_Hooks
{
void *(*malloc_fn)(size_t sz);
void (*free_fn)(void *ptr);
} cJSON_Hooks;
typedef int cJSON_bool;
#if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32))
#define __WINDOWS__
#endif
#ifdef __WINDOWS__
/* When compiling for windows, we specify a specific calling convention to avoid issues where we are being called from a project with a different default calling convention. For windows you have 2 define options:
CJSON_HIDE_SYMBOLS - Define this in the case where you don't want to ever dllexport symbols
CJSON_EXPORT_SYMBOLS - Define this on library build when you want to dllexport symbols (default)
CJSON_IMPORT_SYMBOLS - Define this if you want to dllimport symbol
For *nix builds that support visibility attribute, you can define similar behavior by
setting default visibility to hidden by adding
-fvisibility=hidden (for gcc)
or
-xldscope=hidden (for sun cc)
to CFLAGS
then using the CJSON_API_VISIBILITY flag to "export" the same symbols the way CJSON_EXPORT_SYMBOLS does
*/
/* export symbols by default, this is necessary for copy pasting the C and header file */
#if !defined(CJSON_HIDE_SYMBOLS) && !defined(CJSON_IMPORT_SYMBOLS) && !defined(CJSON_EXPORT_SYMBOLS)
#define CJSON_EXPORT_SYMBOLS
#endif
#if defined(CJSON_HIDE_SYMBOLS)
#define CJSON_PUBLIC(type) type __stdcall
#elif defined(CJSON_EXPORT_SYMBOLS)
#define CJSON_PUBLIC(type) __declspec(dllexport) type __stdcall
#elif defined(CJSON_IMPORT_SYMBOLS)
#define CJSON_PUBLIC(type) __declspec(dllimport) type __stdcall
#endif
#else /* !WIN32 */
#if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(CJSON_API_VISIBILITY)
#define CJSON_PUBLIC(type) __attribute__((visibility("default"))) type
#else
#define CJSON_PUBLIC(type) type
#endif
#endif
/* Limits how deeply nested arrays/objects can be before cJSON rejects to parse them.
* This is to prevent stack overflows. */
#ifndef CJSON_NESTING_LIMIT
#define CJSON_NESTING_LIMIT 1000
#endif
/* returns the version of cJSON as a string */
CJSON_PUBLIC(const char*) cJSON_Version(void);
/* Supply malloc, realloc and free functions to cJSON */
CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks);
/* Memory Management: the caller is always responsible to free the results from all variants of cJSON_Parse (with cJSON_Delete) and cJSON_Print (with stdlib free, cJSON_Hooks.free_fn, or cJSON_free as appropriate). The exception is cJSON_PrintPreallocated, where the caller has full responsibility of the buffer. */
/* Supply a block of JSON, and this returns a cJSON object you can interrogate. */
CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);
/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error so will match cJSON_GetErrorPtr(). */
CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated);
/* Render a cJSON entity to text for transfer/storage. */
CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
/* Render a cJSON entity to text for transfer/storage without any formatting. */
CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);
/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt);
/* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */
/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you actually need */
CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format);
/* Delete a cJSON entity and all subentities. */
CJSON_PUBLIC(void) cJSON_Delete(cJSON *c);
/* Returns the number of items in an array (or object). */
CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array);
/* Retrieve item number "index" from array "array". Returns NULL if unsuccessful. */
CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index);
/* Get item "string" from object. Case insensitive. */
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string);
CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string);
/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void);
/* Check if the item is a string and return its valuestring */
CJSON_PUBLIC(char *) cJSON_GetStringValue(cJSON *item);
/* These functions check the type of an item */
CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item);
/* These calls create a cJSON item of the appropriate type. */
CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void);
CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void);
CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void);
CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean);
CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num);
CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string);
/* raw json */
CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw);
CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);
CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);
/* Create a string where valuestring references a string so
* it will not be freed by cJSON_Delete */
CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string);
/* Create an object/array that only references it's elements so
* they will not be freed by cJSON_Delete */
CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child);
CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child);
/* These utilities create an Array of count items. */
CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count);
CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count);
CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count);
CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char **strings, int count);
/* Append item to the specified array/object. */
CJSON_PUBLIC(void) cJSON_AddItemToArray(cJSON *array, cJSON *item);
CJSON_PUBLIC(void) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
/* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object.
* WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before
* writing to `item->string` */
CJSON_PUBLIC(void) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item);
/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */
CJSON_PUBLIC(void) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item);
/* Remove/Detach items from Arrays/Objects. */
CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item);
CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which);
CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which);
CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string);
CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string);
CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string);
CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string);
/* Update array items. */
CJSON_PUBLIC(void) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement);
CJSON_PUBLIC(void) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem);
CJSON_PUBLIC(void) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
CJSON_PUBLIC(void) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,const char *string,cJSON *newitem);
/* Duplicate a cJSON item */
CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse);
/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
need to be released. With recurse!=0, it will duplicate any children connected to the item.
The item->next and ->prev pointers are always zero on return from Duplicate. */
/* Recursively compare two cJSON items for equality. If either a or b is NULL or invalid, they will be considered unequal.
* case_sensitive determines if object keys are treated case sensitive (1) or case insensitive (0) */
CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive);
CJSON_PUBLIC(void) cJSON_Minify(char *json);
/* Helper functions for creating and adding items to an object at the same time.
* They return the added item or NULL on failure. */
CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);
CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);
CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);
CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean);
CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);
CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);
CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw);
CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name);
CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name);
/* When assigning an integer value, it needs to be propagated to valuedouble too. */
#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number))
/* helper for the cJSON_SetNumberValue macro */
CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number);
#define cJSON_SetNumberValue(object, number) ((object != NULL) ? cJSON_SetNumberHelper(object, (double)number) : (number))
/* Macro for iterating over an array or object */
#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next)
/* malloc/free objects using the malloc/free functions that have been set with cJSON_InitHooks */
CJSON_PUBLIC(void *) cJSON_malloc(size_t size);
CJSON_PUBLIC(void) cJSON_free(void *object);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,19 @@
Copyright (c) 2009-2017 Dave Gamble and cJSON contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@ -0,0 +1,64 @@
#ifndef INCLUDE_API_CLIENT_H
#define INCLUDE_API_CLIENT_H
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <stdint.h>
#include <curl/curl.h>
#include "../include/list.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
typedef struct sslConfig_t {
char *clientCertFile; /* client certificate */
char *clientKeyFile; /* client private key */
char *CACertFile; /* CA certificate */
int insecureSkipTlsVerify ; /* 0 -- verify server certificate */
/* 1 -- skip ssl verify for server certificate */
} sslConfig_t;
typedef struct apiClient_t {
char *basePath;
sslConfig_t *sslConfig;
void *dataReceived;
long dataReceivedLen;
void (*data_callback_func)(void **, long *);
int (*progress_func)(void *, curl_off_t, curl_off_t, curl_off_t, curl_off_t);
void *progress_data;
long response_code;
char *accessToken;
list_t *apiKeys_api_key;
} apiClient_t;
apiClient_t* apiClient_create();
apiClient_t* apiClient_create_with_base_path(const char *basePath
, sslConfig_t *sslConfig
, list_t *apiKeys_api_key
);
void apiClient_free(apiClient_t *apiClient);
void apiClient_invoke(apiClient_t *apiClient,const char* operationParameter, list_t *queryParameters, list_t *headerParameters, list_t *formParameters,list_t *headerType,list_t *contentType, const char *bodyParameters, const char *requestType);
sslConfig_t *sslConfig_create(const char *clientCertFile, const char *clientKeyFile, const char *CACertFile, int insecureSkipTlsVerify);
void sslConfig_free(sslConfig_t *sslConfig);
char *strReplace(char *orig, char *rep, char *with);
/*
* In single thread program, the function apiClient_setupGlobalEnv is not needed.
* But in multi-thread program, apiClient_setupGlobalEnv must be called before any worker thread is created
*/
void apiClient_setupGlobalEnv();
/*
* This function apiClient_unsetupGlobalEnv must be called whether single or multiple program.
* In multi-thread program, it is must be called after all worker threads end.
*/
void apiClient_unsetupGlobalEnv();
#endif // INCLUDE_API_CLIENT_H

View File

@ -0,0 +1,18 @@
#ifndef INCLUDE_BINARY_H
#define INCLUDE_BINARY_H
#include <stdint.h>
typedef struct binary_t
{
uint8_t* data;
unsigned int len;
} binary_t;
binary_t* instantiate_binary_t(char* data, int len);
char *base64encode(const void *b64_encode_this, int encode_this_many_bytes);
char *base64decode(const void *b64_decode_this, int decode_this_many_bytes, int *decoded_bytes);
#endif // INCLUDE_BINARY_H

View File

@ -0,0 +1,17 @@
#ifndef _keyValuePair_H_
#define _keyValuePair_H_
#include<string.h>
typedef struct keyValuePair_t {
char* key;
void* value;
} keyValuePair_t;
keyValuePair_t *keyValuePair_create(char *key, void *value);
keyValuePair_t* keyValuePair_create_allocate(char* key, double value);
void keyValuePair_free(keyValuePair_t *keyValuePair);
#endif /* _keyValuePair_H_ */

View File

@ -0,0 +1,42 @@
#ifndef INCLUDE_LIST_H
#define INCLUDE_LIST_H
#include "../external/cJSON.h"
#include "../include/list.h"
typedef struct list_t list_t;
typedef struct listEntry_t listEntry_t;
struct listEntry_t {
listEntry_t* nextListEntry;
listEntry_t* prevListEntry;
void* data;
};
typedef struct list_t {
listEntry_t *firstEntry;
listEntry_t *lastEntry;
long count;
} list_t;
#define list_ForEach(element, list) for(element = (list != NULL) ? (list)->firstEntry : NULL; element != NULL; element = element->nextListEntry)
list_t* list_createList();
void list_freeList(list_t* listToFree);
void list_addElement(list_t* list, void* dataToAddInList);
listEntry_t* list_getElementAt(list_t *list, long indexOfElement);
listEntry_t* list_getWithIndex(list_t* list, int index);
void list_removeElement(list_t* list, listEntry_t* elementToRemove);
void list_iterateThroughListForward(list_t* list, void (*operationToPerform)(listEntry_t*, void*), void *additionalDataNeededForCallbackFunction);
void list_iterateThroughListBackward(list_t* list, void (*operationToPerform)(listEntry_t*, void*), void *additionalDataNeededForCallbackFunction);
void listEntry_printAsInt(listEntry_t* listEntry, void *additionalData);
void listEntry_free(listEntry_t *listEntry, void *additionalData);
char* findStrInStrList(list_t* strList, const char* str);
void clear_and_free_string_list(list_t * list);
#endif // INCLUDE_LIST_H

View File

@ -0,0 +1,11 @@
COPYRIGHT AND PERMISSION NOTICE
Copyright (c) 1996 - 2018, Daniel Stenberg, daniel@haxx.se, and many contributors, see the THANKS file.
All rights reserved.
Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder.

View File

@ -0,0 +1,117 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "api_response.h"
api_response_t *api_response_create(
int code,
char *type,
char *message
) {
api_response_t *api_response_local_var = malloc(sizeof(api_response_t));
if (!api_response_local_var) {
return NULL;
}
api_response_local_var->code = code;
api_response_local_var->type = type;
api_response_local_var->message = message;
return api_response_local_var;
}
void api_response_free(api_response_t *api_response) {
if(NULL == api_response){
return ;
}
listEntry_t *listEntry;
if (api_response->type) {
free(api_response->type);
api_response->type = NULL;
}
if (api_response->message) {
free(api_response->message);
api_response->message = NULL;
}
free(api_response);
}
cJSON *api_response_convertToJSON(api_response_t *api_response) {
cJSON *item = cJSON_CreateObject();
// api_response->code
if(api_response->code) {
if(cJSON_AddNumberToObject(item, "code", api_response->code) == NULL) {
goto fail; //Numeric
}
}
// api_response->type
if(api_response->type) {
if(cJSON_AddStringToObject(item, "type", api_response->type) == NULL) {
goto fail; //String
}
}
// api_response->message
if(api_response->message) {
if(cJSON_AddStringToObject(item, "message", api_response->message) == NULL) {
goto fail; //String
}
}
return item;
fail:
if (item) {
cJSON_Delete(item);
}
return NULL;
}
api_response_t *api_response_parseFromJSON(cJSON *api_responseJSON){
api_response_t *api_response_local_var = NULL;
// api_response->code
cJSON *code = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "code");
if (code) {
if(!cJSON_IsNumber(code))
{
goto end; //Numeric
}
}
// api_response->type
cJSON *type = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "type");
if (type) {
if(!cJSON_IsString(type) && !cJSON_IsNull(type))
{
goto end; //String
}
}
// api_response->message
cJSON *message = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "message");
if (message) {
if(!cJSON_IsString(message) && !cJSON_IsNull(message))
{
goto end; //String
}
}
api_response_local_var = api_response_create (
code ? code->valuedouble : 0,
type && !cJSON_IsNull(type) ? strdup(type->valuestring) : NULL,
message && !cJSON_IsNull(message) ? strdup(message->valuestring) : NULL
);
return api_response_local_var;
end:
return NULL;
}

View File

@ -0,0 +1,41 @@
/*
* api_response.h
*
* Describes the result of uploading an image resource
*/
#ifndef _api_response_H_
#define _api_response_H_
#include <string.h>
#include "../external/cJSON.h"
#include "../include/list.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
typedef struct api_response_t api_response_t;
typedef struct api_response_t {
int code; //numeric
char *type; // string
char *message; // string
} api_response_t;
api_response_t *api_response_create(
int code,
char *type,
char *message
);
void api_response_free(api_response_t *api_response);
api_response_t *api_response_parseFromJSON(cJSON *api_responseJSON);
cJSON *api_response_convertToJSON(api_response_t *api_response);
#endif /* _api_response_H_ */

View File

@ -0,0 +1,93 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "category.h"
category_t *category_create(
long id,
char *name
) {
category_t *category_local_var = malloc(sizeof(category_t));
if (!category_local_var) {
return NULL;
}
category_local_var->id = id;
category_local_var->name = name;
return category_local_var;
}
void category_free(category_t *category) {
if(NULL == category){
return ;
}
listEntry_t *listEntry;
if (category->name) {
free(category->name);
category->name = NULL;
}
free(category);
}
cJSON *category_convertToJSON(category_t *category) {
cJSON *item = cJSON_CreateObject();
// category->id
if(category->id) {
if(cJSON_AddNumberToObject(item, "id", category->id) == NULL) {
goto fail; //Numeric
}
}
// category->name
if(category->name) {
if(cJSON_AddStringToObject(item, "name", category->name) == NULL) {
goto fail; //String
}
}
return item;
fail:
if (item) {
cJSON_Delete(item);
}
return NULL;
}
category_t *category_parseFromJSON(cJSON *categoryJSON){
category_t *category_local_var = NULL;
// category->id
cJSON *id = cJSON_GetObjectItemCaseSensitive(categoryJSON, "id");
if (id) {
if(!cJSON_IsNumber(id))
{
goto end; //Numeric
}
}
// category->name
cJSON *name = cJSON_GetObjectItemCaseSensitive(categoryJSON, "name");
if (name) {
if(!cJSON_IsString(name) && !cJSON_IsNull(name))
{
goto end; //String
}
}
category_local_var = category_create (
id ? id->valuedouble : 0,
name && !cJSON_IsNull(name) ? strdup(name->valuestring) : NULL
);
return category_local_var;
end:
return NULL;
}

View File

@ -0,0 +1,39 @@
/*
* category.h
*
* A category for a pet
*/
#ifndef _category_H_
#define _category_H_
#include <string.h>
#include "../external/cJSON.h"
#include "../include/list.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
typedef struct category_t category_t;
typedef struct category_t {
long id; //numeric
char *name; // string
} category_t;
category_t *category_create(
long id,
char *name
);
void category_free(category_t *category);
category_t *category_parseFromJSON(cJSON *categoryJSON);
cJSON *category_convertToJSON(category_t *category);
#endif /* _category_H_ */

View File

@ -0,0 +1,93 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "mapped_model.h"
MappedModel_t *MappedModel_create(
int another_property,
char *uuid_property
) {
MappedModel_t *MappedModel_local_var = malloc(sizeof(MappedModel_t));
if (!MappedModel_local_var) {
return NULL;
}
MappedModel_local_var->another_property = another_property;
MappedModel_local_var->uuid_property = uuid_property;
return MappedModel_local_var;
}
void MappedModel_free(MappedModel_t *MappedModel) {
if(NULL == MappedModel){
return ;
}
listEntry_t *listEntry;
if (MappedModel->uuid_property) {
free(MappedModel->uuid_property);
MappedModel->uuid_property = NULL;
}
free(MappedModel);
}
cJSON *MappedModel_convertToJSON(MappedModel_t *MappedModel) {
cJSON *item = cJSON_CreateObject();
// MappedModel->another_property
if(MappedModel->another_property) {
if(cJSON_AddNumberToObject(item, "another_property", MappedModel->another_property) == NULL) {
goto fail; //Numeric
}
}
// MappedModel->uuid_property
if(MappedModel->uuid_property) {
if(cJSON_AddStringToObject(item, "uuid_property", MappedModel->uuid_property) == NULL) {
goto fail; //String
}
}
return item;
fail:
if (item) {
cJSON_Delete(item);
}
return NULL;
}
MappedModel_t *MappedModel_parseFromJSON(cJSON *MappedModelJSON){
MappedModel_t *MappedModel_local_var = NULL;
// MappedModel->another_property
cJSON *another_property = cJSON_GetObjectItemCaseSensitive(MappedModelJSON, "another_property");
if (another_property) {
if(!cJSON_IsNumber(another_property))
{
goto end; //Numeric
}
}
// MappedModel->uuid_property
cJSON *uuid_property = cJSON_GetObjectItemCaseSensitive(MappedModelJSON, "uuid_property");
if (uuid_property) {
if(!cJSON_IsString(uuid_property) && !cJSON_IsNull(uuid_property))
{
goto end; //String
}
}
MappedModel_local_var = MappedModel_create (
another_property ? another_property->valuedouble : 0,
uuid_property && !cJSON_IsNull(uuid_property) ? strdup(uuid_property->valuestring) : NULL
);
return MappedModel_local_var;
end:
return NULL;
}

View File

@ -0,0 +1,39 @@
/*
* mapped_model.h
*
* to test mapping features
*/
#ifndef _MappedModel_H_
#define _MappedModel_H_
#include <string.h>
#include "../external/cJSON.h"
#include "../include/list.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
typedef struct MappedModel_t MappedModel_t;
typedef struct MappedModel_t {
int another_property; //numeric
char *uuid_property; // string
} MappedModel_t;
MappedModel_t *MappedModel_create(
int another_property,
char *uuid_property
);
void MappedModel_free(MappedModel_t *MappedModel);
MappedModel_t *MappedModel_parseFromJSON(cJSON *MappedModelJSON);
cJSON *MappedModel_convertToJSON(MappedModel_t *MappedModel);
#endif /* _MappedModel_H_ */

View File

@ -0,0 +1,170 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "model_with_set_propertes.h"
model_with_set_propertes_t *model_with_set_propertes_create(
list_t *tag_set,
list_t *string_set
) {
model_with_set_propertes_t *model_with_set_propertes_local_var = malloc(sizeof(model_with_set_propertes_t));
if (!model_with_set_propertes_local_var) {
return NULL;
}
model_with_set_propertes_local_var->tag_set = tag_set;
model_with_set_propertes_local_var->string_set = string_set;
return model_with_set_propertes_local_var;
}
void model_with_set_propertes_free(model_with_set_propertes_t *model_with_set_propertes) {
if(NULL == model_with_set_propertes){
return ;
}
listEntry_t *listEntry;
if (model_with_set_propertes->tag_set) {
list_ForEach(listEntry, model_with_set_propertes->tag_set) {
tag_free(listEntry->data);
}
list_freeList(model_with_set_propertes->tag_set);
model_with_set_propertes->tag_set = NULL;
}
if (model_with_set_propertes->string_set) {
list_ForEach(listEntry, model_with_set_propertes->string_set) {
free(listEntry->data);
}
list_freeList(model_with_set_propertes->string_set);
model_with_set_propertes->string_set = NULL;
}
free(model_with_set_propertes);
}
cJSON *model_with_set_propertes_convertToJSON(model_with_set_propertes_t *model_with_set_propertes) {
cJSON *item = cJSON_CreateObject();
// model_with_set_propertes->tag_set
if(model_with_set_propertes->tag_set) {
cJSON *tag_set = cJSON_AddArrayToObject(item, "tag_set");
if(tag_set == NULL) {
goto fail; //nonprimitive container
}
listEntry_t *tag_setListEntry;
if (model_with_set_propertes->tag_set) {
list_ForEach(tag_setListEntry, model_with_set_propertes->tag_set) {
cJSON *itemLocal = tag_convertToJSON(tag_setListEntry->data);
if(itemLocal == NULL) {
goto fail;
}
cJSON_AddItemToArray(tag_set, itemLocal);
}
}
}
// model_with_set_propertes->string_set
if(model_with_set_propertes->string_set) {
cJSON *string_set = cJSON_AddArrayToObject(item, "string_set");
if(string_set == NULL) {
goto fail; //primitive container
}
listEntry_t *string_setListEntry;
list_ForEach(string_setListEntry, model_with_set_propertes->string_set) {
if(cJSON_AddStringToObject(string_set, "", (char*)string_setListEntry->data) == NULL)
{
goto fail;
}
}
}
return item;
fail:
if (item) {
cJSON_Delete(item);
}
return NULL;
}
model_with_set_propertes_t *model_with_set_propertes_parseFromJSON(cJSON *model_with_set_propertesJSON){
model_with_set_propertes_t *model_with_set_propertes_local_var = NULL;
// define the local list for model_with_set_propertes->tag_set
list_t *tag_setList = NULL;
// define the local list for model_with_set_propertes->string_set
list_t *string_setList = NULL;
// model_with_set_propertes->tag_set
cJSON *tag_set = cJSON_GetObjectItemCaseSensitive(model_with_set_propertesJSON, "tag_set");
if (tag_set) {
cJSON *tag_set_local_nonprimitive = NULL;
if(!cJSON_IsArray(tag_set)){
goto end; //nonprimitive container
}
tag_setList = list_createList();
cJSON_ArrayForEach(tag_set_local_nonprimitive,tag_set )
{
if(!cJSON_IsObject(tag_set_local_nonprimitive)){
goto end;
}
tag_t *tag_setItem = tag_parseFromJSON(tag_set_local_nonprimitive);
list_addElement(tag_setList, tag_setItem);
}
}
// model_with_set_propertes->string_set
cJSON *string_set = cJSON_GetObjectItemCaseSensitive(model_with_set_propertesJSON, "string_set");
if (string_set) {
cJSON *string_set_local = NULL;
if(!cJSON_IsArray(string_set)) {
goto end;//primitive container
}
string_setList = list_createList();
cJSON_ArrayForEach(string_set_local, string_set)
{
if(!cJSON_IsString(string_set_local))
{
goto end;
}
list_addElement(string_setList , strdup(string_set_local->valuestring));
}
}
model_with_set_propertes_local_var = model_with_set_propertes_create (
tag_set ? tag_setList : NULL,
string_set ? string_setList : NULL
);
return model_with_set_propertes_local_var;
end:
if (tag_setList) {
listEntry_t *listEntry = NULL;
list_ForEach(listEntry, tag_setList) {
tag_free(listEntry->data);
listEntry->data = NULL;
}
list_freeList(tag_setList);
tag_setList = NULL;
}
if (string_setList) {
listEntry_t *listEntry = NULL;
list_ForEach(listEntry, string_setList) {
free(listEntry->data);
listEntry->data = NULL;
}
list_freeList(string_setList);
string_setList = NULL;
}
return NULL;
}

View File

@ -0,0 +1,40 @@
/*
* model_with_set_propertes.h
*
* to test set properties
*/
#ifndef _model_with_set_propertes_H_
#define _model_with_set_propertes_H_
#include <string.h>
#include "../external/cJSON.h"
#include "../include/list.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
typedef struct model_with_set_propertes_t model_with_set_propertes_t;
#include "tag.h"
typedef struct model_with_set_propertes_t {
list_t *tag_set; //nonprimitive container
list_t *string_set; //primitive container
} model_with_set_propertes_t;
model_with_set_propertes_t *model_with_set_propertes_create(
list_t *tag_set,
list_t *string_set
);
void model_with_set_propertes_free(model_with_set_propertes_t *model_with_set_propertes);
model_with_set_propertes_t *model_with_set_propertes_parseFromJSON(cJSON *model_with_set_propertesJSON);
cJSON *model_with_set_propertes_convertToJSON(model_with_set_propertes_t *model_with_set_propertes);
#endif /* _model_with_set_propertes_H_ */

View File

@ -0,0 +1,51 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "object.h"
object_t *object_create() {
object_t *object = calloc(1, sizeof(object_t));
return object;
}
void object_free(object_t *object) {
if (!object) {
return ;
}
if (object->temporary) {
free(object->temporary);
object->temporary = NULL;
}
free (object);
}
cJSON *object_convertToJSON(object_t *object) {
if (!object) {
return NULL;
}
if (!object->temporary) {
return cJSON_Parse("null");
}
return cJSON_Parse(object->temporary);
}
object_t *object_parseFromJSON(cJSON *json){
if (!json) {
goto end;
}
object_t *object = object_create();
if (!object) {
goto end;
}
object->temporary = cJSON_PrintUnformatted(json);
return object;
end:
return NULL;
}

View File

@ -0,0 +1,27 @@
/*
* object.h
*/
#ifndef _object_H_
#define _object_H_
#include <string.h>
#include "../external/cJSON.h"
#include "../include/list.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
typedef struct object_t {
void *temporary;
} object_t;
object_t *object_create();
void object_free(object_t *object);
object_t *object_parseFromJSON(cJSON *json);
cJSON *object_convertToJSON(object_t *object);
#endif /* _object_H_ */

View File

@ -0,0 +1,193 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "order.h"
char* order_status_ToString(openapi_petstore_order_STATUS_e status) {
char* statusArray[] = { "NULL", "placed", "approved", "delivered" };
return statusArray[status];
}
openapi_petstore_order_STATUS_e order_status_FromString(char* status){
int stringToReturn = 0;
char *statusArray[] = { "NULL", "placed", "approved", "delivered" };
size_t sizeofArray = sizeof(statusArray) / sizeof(statusArray[0]);
while(stringToReturn < sizeofArray) {
if(strcmp(status, statusArray[stringToReturn]) == 0) {
return stringToReturn;
}
stringToReturn++;
}
return 0;
}
order_t *order_create(
long id,
long pet_id,
int quantity,
char *ship_date,
openapi_petstore_order_STATUS_e status,
int complete
) {
order_t *order_local_var = malloc(sizeof(order_t));
if (!order_local_var) {
return NULL;
}
order_local_var->id = id;
order_local_var->pet_id = pet_id;
order_local_var->quantity = quantity;
order_local_var->ship_date = ship_date;
order_local_var->status = status;
order_local_var->complete = complete;
return order_local_var;
}
void order_free(order_t *order) {
if(NULL == order){
return ;
}
listEntry_t *listEntry;
if (order->ship_date) {
free(order->ship_date);
order->ship_date = NULL;
}
free(order);
}
cJSON *order_convertToJSON(order_t *order) {
cJSON *item = cJSON_CreateObject();
// order->id
if(order->id) {
if(cJSON_AddNumberToObject(item, "id", order->id) == NULL) {
goto fail; //Numeric
}
}
// order->pet_id
if(order->pet_id) {
if(cJSON_AddNumberToObject(item, "petId", order->pet_id) == NULL) {
goto fail; //Numeric
}
}
// order->quantity
if(order->quantity) {
if(cJSON_AddNumberToObject(item, "quantity", order->quantity) == NULL) {
goto fail; //Numeric
}
}
// order->ship_date
if(order->ship_date) {
if(cJSON_AddStringToObject(item, "shipDate", order->ship_date) == NULL) {
goto fail; //Date-Time
}
}
// order->status
if(order->status != openapi_petstore_order_STATUS_NULL) {
if(cJSON_AddStringToObject(item, "status", statusorder_ToString(order->status)) == NULL)
{
goto fail; //Enum
}
}
// order->complete
if(order->complete) {
if(cJSON_AddBoolToObject(item, "complete", order->complete) == NULL) {
goto fail; //Bool
}
}
return item;
fail:
if (item) {
cJSON_Delete(item);
}
return NULL;
}
order_t *order_parseFromJSON(cJSON *orderJSON){
order_t *order_local_var = NULL;
// order->id
cJSON *id = cJSON_GetObjectItemCaseSensitive(orderJSON, "id");
if (id) {
if(!cJSON_IsNumber(id))
{
goto end; //Numeric
}
}
// order->pet_id
cJSON *pet_id = cJSON_GetObjectItemCaseSensitive(orderJSON, "petId");
if (pet_id) {
if(!cJSON_IsNumber(pet_id))
{
goto end; //Numeric
}
}
// order->quantity
cJSON *quantity = cJSON_GetObjectItemCaseSensitive(orderJSON, "quantity");
if (quantity) {
if(!cJSON_IsNumber(quantity))
{
goto end; //Numeric
}
}
// order->ship_date
cJSON *ship_date = cJSON_GetObjectItemCaseSensitive(orderJSON, "shipDate");
if (ship_date) {
if(!cJSON_IsString(ship_date) && !cJSON_IsNull(ship_date))
{
goto end; //DateTime
}
}
// order->status
cJSON *status = cJSON_GetObjectItemCaseSensitive(orderJSON, "status");
openapi_petstore_order_STATUS_e statusVariable;
if (status) {
if(!cJSON_IsString(status))
{
goto end; //Enum
}
statusVariable = order_status_FromString(status->valuestring);
}
// order->complete
cJSON *complete = cJSON_GetObjectItemCaseSensitive(orderJSON, "complete");
if (complete) {
if(!cJSON_IsBool(complete))
{
goto end; //Bool
}
}
order_local_var = order_create (
id ? id->valuedouble : 0,
pet_id ? pet_id->valuedouble : 0,
quantity ? quantity->valuedouble : 0,
ship_date && !cJSON_IsNull(ship_date) ? strdup(ship_date->valuestring) : NULL,
status ? statusVariable : openapi_petstore_order_STATUS_NULL,
complete ? complete->valueint : 0
);
return order_local_var;
end:
return NULL;
}

View File

@ -0,0 +1,55 @@
/*
* order.h
*
* An order for a pets from the pet store
*/
#ifndef _order_H_
#define _order_H_
#include <string.h>
#include "../external/cJSON.h"
#include "../include/list.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
typedef struct order_t order_t;
// Enum STATUS for order
typedef enum { openapi_petstore_order_STATUS_NULL = 0, openapi_petstore_order_STATUS_placed, openapi_petstore_order_STATUS_approved, openapi_petstore_order_STATUS_delivered } openapi_petstore_order_STATUS_e;
char* order_status_ToString(openapi_petstore_order_STATUS_e status);
openapi_petstore_order_STATUS_e order_status_FromString(char* status);
typedef struct order_t {
long id; //numeric
long pet_id; //numeric
int quantity; //numeric
char *ship_date; //date time
openapi_petstore_order_STATUS_e status; //enum
int complete; //boolean
} order_t;
order_t *order_create(
long id,
long pet_id,
int quantity,
char *ship_date,
openapi_petstore_order_STATUS_e status,
int complete
);
void order_free(order_t *order);
order_t *order_parseFromJSON(cJSON *orderJSON);
cJSON *order_convertToJSON(order_t *order);
#endif /* _order_H_ */

View File

@ -0,0 +1,295 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "pet.h"
char* pet_status_ToString(openapi_petstore_pet_STATUS_e status) {
char* statusArray[] = { "NULL", "available", "pending", "sold" };
return statusArray[status];
}
openapi_petstore_pet_STATUS_e pet_status_FromString(char* status){
int stringToReturn = 0;
char *statusArray[] = { "NULL", "available", "pending", "sold" };
size_t sizeofArray = sizeof(statusArray) / sizeof(statusArray[0]);
while(stringToReturn < sizeofArray) {
if(strcmp(status, statusArray[stringToReturn]) == 0) {
return stringToReturn;
}
stringToReturn++;
}
return 0;
}
pet_t *pet_create(
long id,
category_t *category,
char *name,
list_t *photo_urls,
list_t *tags,
openapi_petstore_pet_STATUS_e status
) {
pet_t *pet_local_var = malloc(sizeof(pet_t));
if (!pet_local_var) {
return NULL;
}
pet_local_var->id = id;
pet_local_var->category = category;
pet_local_var->name = name;
pet_local_var->photo_urls = photo_urls;
pet_local_var->tags = tags;
pet_local_var->status = status;
return pet_local_var;
}
void pet_free(pet_t *pet) {
if(NULL == pet){
return ;
}
listEntry_t *listEntry;
if (pet->category) {
category_free(pet->category);
pet->category = NULL;
}
if (pet->name) {
free(pet->name);
pet->name = NULL;
}
if (pet->photo_urls) {
list_ForEach(listEntry, pet->photo_urls) {
free(listEntry->data);
}
list_freeList(pet->photo_urls);
pet->photo_urls = NULL;
}
if (pet->tags) {
list_ForEach(listEntry, pet->tags) {
tag_free(listEntry->data);
}
list_freeList(pet->tags);
pet->tags = NULL;
}
free(pet);
}
cJSON *pet_convertToJSON(pet_t *pet) {
cJSON *item = cJSON_CreateObject();
// pet->id
if(pet->id) {
if(cJSON_AddNumberToObject(item, "id", pet->id) == NULL) {
goto fail; //Numeric
}
}
// pet->category
if(pet->category) {
cJSON *category_local_JSON = category_convertToJSON(pet->category);
if(category_local_JSON == NULL) {
goto fail; //model
}
cJSON_AddItemToObject(item, "category", category_local_JSON);
if(item->child == NULL) {
goto fail;
}
}
// pet->name
if (!pet->name) {
goto fail;
}
if(cJSON_AddStringToObject(item, "name", pet->name) == NULL) {
goto fail; //String
}
// pet->photo_urls
if (!pet->photo_urls) {
goto fail;
}
cJSON *photo_urls = cJSON_AddArrayToObject(item, "photoUrls");
if(photo_urls == NULL) {
goto fail; //primitive container
}
listEntry_t *photo_urlsListEntry;
list_ForEach(photo_urlsListEntry, pet->photo_urls) {
if(cJSON_AddStringToObject(photo_urls, "", (char*)photo_urlsListEntry->data) == NULL)
{
goto fail;
}
}
// pet->tags
if(pet->tags) {
cJSON *tags = cJSON_AddArrayToObject(item, "tags");
if(tags == NULL) {
goto fail; //nonprimitive container
}
listEntry_t *tagsListEntry;
if (pet->tags) {
list_ForEach(tagsListEntry, pet->tags) {
cJSON *itemLocal = tag_convertToJSON(tagsListEntry->data);
if(itemLocal == NULL) {
goto fail;
}
cJSON_AddItemToArray(tags, itemLocal);
}
}
}
// pet->status
if(pet->status != openapi_petstore_pet_STATUS_NULL) {
if(cJSON_AddStringToObject(item, "status", statuspet_ToString(pet->status)) == NULL)
{
goto fail; //Enum
}
}
return item;
fail:
if (item) {
cJSON_Delete(item);
}
return NULL;
}
pet_t *pet_parseFromJSON(cJSON *petJSON){
pet_t *pet_local_var = NULL;
// define the local variable for pet->category
category_t *category_local_nonprim = NULL;
// define the local list for pet->photo_urls
list_t *photo_urlsList = NULL;
// define the local list for pet->tags
list_t *tagsList = NULL;
// pet->id
cJSON *id = cJSON_GetObjectItemCaseSensitive(petJSON, "id");
if (id) {
if(!cJSON_IsNumber(id))
{
goto end; //Numeric
}
}
// pet->category
cJSON *category = cJSON_GetObjectItemCaseSensitive(petJSON, "category");
if (category) {
category_local_nonprim = category_parseFromJSON(category); //nonprimitive
}
// pet->name
cJSON *name = cJSON_GetObjectItemCaseSensitive(petJSON, "name");
if (!name) {
goto end;
}
if(!cJSON_IsString(name))
{
goto end; //String
}
// pet->photo_urls
cJSON *photo_urls = cJSON_GetObjectItemCaseSensitive(petJSON, "photoUrls");
if (!photo_urls) {
goto end;
}
cJSON *photo_urls_local = NULL;
if(!cJSON_IsArray(photo_urls)) {
goto end;//primitive container
}
photo_urlsList = list_createList();
cJSON_ArrayForEach(photo_urls_local, photo_urls)
{
if(!cJSON_IsString(photo_urls_local))
{
goto end;
}
list_addElement(photo_urlsList , strdup(photo_urls_local->valuestring));
}
// pet->tags
cJSON *tags = cJSON_GetObjectItemCaseSensitive(petJSON, "tags");
if (tags) {
cJSON *tags_local_nonprimitive = NULL;
if(!cJSON_IsArray(tags)){
goto end; //nonprimitive container
}
tagsList = list_createList();
cJSON_ArrayForEach(tags_local_nonprimitive,tags )
{
if(!cJSON_IsObject(tags_local_nonprimitive)){
goto end;
}
tag_t *tagsItem = tag_parseFromJSON(tags_local_nonprimitive);
list_addElement(tagsList, tagsItem);
}
}
// pet->status
cJSON *status = cJSON_GetObjectItemCaseSensitive(petJSON, "status");
openapi_petstore_pet_STATUS_e statusVariable;
if (status) {
if(!cJSON_IsString(status))
{
goto end; //Enum
}
statusVariable = pet_status_FromString(status->valuestring);
}
pet_local_var = pet_create (
id ? id->valuedouble : 0,
category ? category_local_nonprim : NULL,
strdup(name->valuestring),
photo_urlsList,
tags ? tagsList : NULL,
status ? statusVariable : openapi_petstore_pet_STATUS_NULL
);
return pet_local_var;
end:
if (category_local_nonprim) {
category_free(category_local_nonprim);
category_local_nonprim = NULL;
}
if (photo_urlsList) {
listEntry_t *listEntry = NULL;
list_ForEach(listEntry, photo_urlsList) {
free(listEntry->data);
listEntry->data = NULL;
}
list_freeList(photo_urlsList);
photo_urlsList = NULL;
}
if (tagsList) {
listEntry_t *listEntry = NULL;
list_ForEach(listEntry, tagsList) {
tag_free(listEntry->data);
listEntry->data = NULL;
}
list_freeList(tagsList);
tagsList = NULL;
}
return NULL;
}

View File

@ -0,0 +1,57 @@
/*
* pet.h
*
* A pet for sale in the pet store
*/
#ifndef _pet_H_
#define _pet_H_
#include <string.h>
#include "../external/cJSON.h"
#include "../include/list.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
typedef struct pet_t pet_t;
#include "category.h"
#include "tag.h"
// Enum STATUS for pet
typedef enum { openapi_petstore_pet_STATUS_NULL = 0, openapi_petstore_pet_STATUS_available, openapi_petstore_pet_STATUS_pending, openapi_petstore_pet_STATUS_sold } openapi_petstore_pet_STATUS_e;
char* pet_status_ToString(openapi_petstore_pet_STATUS_e status);
openapi_petstore_pet_STATUS_e pet_status_FromString(char* status);
typedef struct pet_t {
long id; //numeric
struct category_t *category; //model
char *name; // string
list_t *photo_urls; //primitive container
list_t *tags; //nonprimitive container
openapi_petstore_pet_STATUS_e status; //enum
} pet_t;
pet_t *pet_create(
long id,
category_t *category,
char *name,
list_t *photo_urls,
list_t *tags,
openapi_petstore_pet_STATUS_e status
);
void pet_free(pet_t *pet);
pet_t *pet_parseFromJSON(cJSON *petJSON);
cJSON *pet_convertToJSON(pet_t *pet);
#endif /* _pet_H_ */

View File

@ -0,0 +1,93 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "tag.h"
tag_t *tag_create(
long id,
char *name
) {
tag_t *tag_local_var = malloc(sizeof(tag_t));
if (!tag_local_var) {
return NULL;
}
tag_local_var->id = id;
tag_local_var->name = name;
return tag_local_var;
}
void tag_free(tag_t *tag) {
if(NULL == tag){
return ;
}
listEntry_t *listEntry;
if (tag->name) {
free(tag->name);
tag->name = NULL;
}
free(tag);
}
cJSON *tag_convertToJSON(tag_t *tag) {
cJSON *item = cJSON_CreateObject();
// tag->id
if(tag->id) {
if(cJSON_AddNumberToObject(item, "id", tag->id) == NULL) {
goto fail; //Numeric
}
}
// tag->name
if(tag->name) {
if(cJSON_AddStringToObject(item, "name", tag->name) == NULL) {
goto fail; //String
}
}
return item;
fail:
if (item) {
cJSON_Delete(item);
}
return NULL;
}
tag_t *tag_parseFromJSON(cJSON *tagJSON){
tag_t *tag_local_var = NULL;
// tag->id
cJSON *id = cJSON_GetObjectItemCaseSensitive(tagJSON, "id");
if (id) {
if(!cJSON_IsNumber(id))
{
goto end; //Numeric
}
}
// tag->name
cJSON *name = cJSON_GetObjectItemCaseSensitive(tagJSON, "name");
if (name) {
if(!cJSON_IsString(name) && !cJSON_IsNull(name))
{
goto end; //String
}
}
tag_local_var = tag_create (
id ? id->valuedouble : 0,
name && !cJSON_IsNull(name) ? strdup(name->valuestring) : NULL
);
return tag_local_var;
end:
return NULL;
}

View File

@ -0,0 +1,39 @@
/*
* tag.h
*
* A tag for a pet
*/
#ifndef _tag_H_
#define _tag_H_
#include <string.h>
#include "../external/cJSON.h"
#include "../include/list.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
typedef struct tag_t tag_t;
typedef struct tag_t {
long id; //numeric
char *name; // string
} tag_t;
tag_t *tag_create(
long id,
char *name
);
void tag_free(tag_t *tag);
tag_t *tag_parseFromJSON(cJSON *tagJSON);
cJSON *tag_convertToJSON(tag_t *tag);
#endif /* _tag_H_ */

View File

@ -0,0 +1,233 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "user.h"
user_t *user_create(
long id,
char *username,
char *first_name,
char *last_name,
char *email,
char *password,
char *phone,
int user_status
) {
user_t *user_local_var = malloc(sizeof(user_t));
if (!user_local_var) {
return NULL;
}
user_local_var->id = id;
user_local_var->username = username;
user_local_var->first_name = first_name;
user_local_var->last_name = last_name;
user_local_var->email = email;
user_local_var->password = password;
user_local_var->phone = phone;
user_local_var->user_status = user_status;
return user_local_var;
}
void user_free(user_t *user) {
if(NULL == user){
return ;
}
listEntry_t *listEntry;
if (user->username) {
free(user->username);
user->username = NULL;
}
if (user->first_name) {
free(user->first_name);
user->first_name = NULL;
}
if (user->last_name) {
free(user->last_name);
user->last_name = NULL;
}
if (user->email) {
free(user->email);
user->email = NULL;
}
if (user->password) {
free(user->password);
user->password = NULL;
}
if (user->phone) {
free(user->phone);
user->phone = NULL;
}
free(user);
}
cJSON *user_convertToJSON(user_t *user) {
cJSON *item = cJSON_CreateObject();
// user->id
if(user->id) {
if(cJSON_AddNumberToObject(item, "id", user->id) == NULL) {
goto fail; //Numeric
}
}
// user->username
if(user->username) {
if(cJSON_AddStringToObject(item, "username", user->username) == NULL) {
goto fail; //String
}
}
// user->first_name
if(user->first_name) {
if(cJSON_AddStringToObject(item, "firstName", user->first_name) == NULL) {
goto fail; //String
}
}
// user->last_name
if(user->last_name) {
if(cJSON_AddStringToObject(item, "lastName", user->last_name) == NULL) {
goto fail; //String
}
}
// user->email
if(user->email) {
if(cJSON_AddStringToObject(item, "email", user->email) == NULL) {
goto fail; //String
}
}
// user->password
if(user->password) {
if(cJSON_AddStringToObject(item, "password", user->password) == NULL) {
goto fail; //String
}
}
// user->phone
if(user->phone) {
if(cJSON_AddStringToObject(item, "phone", user->phone) == NULL) {
goto fail; //String
}
}
// user->user_status
if(user->user_status) {
if(cJSON_AddNumberToObject(item, "userStatus", user->user_status) == NULL) {
goto fail; //Numeric
}
}
return item;
fail:
if (item) {
cJSON_Delete(item);
}
return NULL;
}
user_t *user_parseFromJSON(cJSON *userJSON){
user_t *user_local_var = NULL;
// user->id
cJSON *id = cJSON_GetObjectItemCaseSensitive(userJSON, "id");
if (id) {
if(!cJSON_IsNumber(id))
{
goto end; //Numeric
}
}
// user->username
cJSON *username = cJSON_GetObjectItemCaseSensitive(userJSON, "username");
if (username) {
if(!cJSON_IsString(username) && !cJSON_IsNull(username))
{
goto end; //String
}
}
// user->first_name
cJSON *first_name = cJSON_GetObjectItemCaseSensitive(userJSON, "firstName");
if (first_name) {
if(!cJSON_IsString(first_name) && !cJSON_IsNull(first_name))
{
goto end; //String
}
}
// user->last_name
cJSON *last_name = cJSON_GetObjectItemCaseSensitive(userJSON, "lastName");
if (last_name) {
if(!cJSON_IsString(last_name) && !cJSON_IsNull(last_name))
{
goto end; //String
}
}
// user->email
cJSON *email = cJSON_GetObjectItemCaseSensitive(userJSON, "email");
if (email) {
if(!cJSON_IsString(email) && !cJSON_IsNull(email))
{
goto end; //String
}
}
// user->password
cJSON *password = cJSON_GetObjectItemCaseSensitive(userJSON, "password");
if (password) {
if(!cJSON_IsString(password) && !cJSON_IsNull(password))
{
goto end; //String
}
}
// user->phone
cJSON *phone = cJSON_GetObjectItemCaseSensitive(userJSON, "phone");
if (phone) {
if(!cJSON_IsString(phone) && !cJSON_IsNull(phone))
{
goto end; //String
}
}
// user->user_status
cJSON *user_status = cJSON_GetObjectItemCaseSensitive(userJSON, "userStatus");
if (user_status) {
if(!cJSON_IsNumber(user_status))
{
goto end; //Numeric
}
}
user_local_var = user_create (
id ? id->valuedouble : 0,
username && !cJSON_IsNull(username) ? strdup(username->valuestring) : NULL,
first_name && !cJSON_IsNull(first_name) ? strdup(first_name->valuestring) : NULL,
last_name && !cJSON_IsNull(last_name) ? strdup(last_name->valuestring) : NULL,
email && !cJSON_IsNull(email) ? strdup(email->valuestring) : NULL,
password && !cJSON_IsNull(password) ? strdup(password->valuestring) : NULL,
phone && !cJSON_IsNull(phone) ? strdup(phone->valuestring) : NULL,
user_status ? user_status->valuedouble : 0
);
return user_local_var;
end:
return NULL;
}

View File

@ -0,0 +1,51 @@
/*
* user.h
*
* A User who is purchasing from the pet store
*/
#ifndef _user_H_
#define _user_H_
#include <string.h>
#include "../external/cJSON.h"
#include "../include/list.h"
#include "../include/keyValuePair.h"
#include "../include/binary.h"
typedef struct user_t user_t;
typedef struct user_t {
long id; //numeric
char *username; // string
char *first_name; // string
char *last_name; // string
char *email; // string
char *password; // string
char *phone; // string
int user_status; //numeric
} user_t;
user_t *user_create(
long id,
char *username,
char *first_name,
char *last_name,
char *email,
char *password,
char *phone,
int user_status
);
void user_free(user_t *user);
user_t *user_parseFromJSON(cJSON *userJSON);
cJSON *user_convertToJSON(user_t *user);
#endif /* _user_H_ */

View File

@ -0,0 +1,546 @@
#include <curl/curl.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "../include/apiClient.h"
size_t writeDataCallback(void *buffer, size_t size, size_t nmemb, void *userp);
apiClient_t *apiClient_create() {
apiClient_t *apiClient = malloc(sizeof(apiClient_t));
apiClient->basePath = strdup("http://petstore.swagger.io/v2");
apiClient->sslConfig = NULL;
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
apiClient->data_callback_func = NULL;
apiClient->progress_func = NULL;
apiClient->progress_data = NULL;
apiClient->response_code = 0;
apiClient->accessToken = NULL;
apiClient->apiKeys_api_key = NULL;
return apiClient;
}
apiClient_t *apiClient_create_with_base_path(const char *basePath
, sslConfig_t *sslConfig
, list_t *apiKeys_api_key
) {
apiClient_t *apiClient = malloc(sizeof(apiClient_t));
if(basePath){
apiClient->basePath = strdup(basePath);
}else{
apiClient->basePath = strdup("http://petstore.swagger.io/v2");
}
if(sslConfig){
apiClient->sslConfig = sslConfig;
}else{
apiClient->sslConfig = NULL;
}
apiClient->dataReceived = NULL;
apiClient->dataReceivedLen = 0;
apiClient->data_callback_func = NULL;
apiClient->progress_func = NULL;
apiClient->progress_data = NULL;
apiClient->response_code = 0;
apiClient->accessToken = NULL;
if(apiKeys_api_key!= NULL) {
apiClient->apiKeys_api_key = list_createList();
listEntry_t *listEntry = NULL;
list_ForEach(listEntry, apiKeys_api_key) {
keyValuePair_t *pair = listEntry->data;
keyValuePair_t *pairDup = keyValuePair_create(strdup(pair->key), strdup(pair->value));
list_addElement(apiClient->apiKeys_api_key, pairDup);
}
}else{
apiClient->apiKeys_api_key = NULL;
}
return apiClient;
}
void apiClient_free(apiClient_t *apiClient) {
if(apiClient->basePath) {
free(apiClient->basePath);
}
apiClient->data_callback_func = NULL;
apiClient->progress_func = NULL;
apiClient->progress_data = NULL;
if(apiClient->accessToken) {
free(apiClient->accessToken);
}
if(apiClient->apiKeys_api_key) {
listEntry_t *listEntry = NULL;
list_ForEach(listEntry, apiClient->apiKeys_api_key) {
keyValuePair_t *pair = listEntry->data;
if(pair->key){
free(pair->key);
}
if(pair->value){
free(pair->value);
}
keyValuePair_free(pair);
}
list_freeList(apiClient->apiKeys_api_key);
}
free(apiClient);
}
sslConfig_t *sslConfig_create(const char *clientCertFile, const char *clientKeyFile, const char *CACertFile, int insecureSkipTlsVerify) {
sslConfig_t *sslConfig = calloc(1, sizeof(sslConfig_t));
if ( clientCertFile ) {
sslConfig->clientCertFile = strdup(clientCertFile);
}
if ( clientKeyFile ) {
sslConfig->clientKeyFile = strdup(clientKeyFile);
}
if ( CACertFile ) {
sslConfig->CACertFile = strdup(CACertFile);
}
sslConfig->insecureSkipTlsVerify = insecureSkipTlsVerify;
return sslConfig;
}
void sslConfig_free(sslConfig_t *sslConfig) {
if ( sslConfig->clientCertFile ) {
free(sslConfig->clientCertFile);
}
if ( sslConfig->clientKeyFile ) {
free(sslConfig->clientKeyFile);
}
if ( sslConfig->CACertFile ){
free(sslConfig->CACertFile);
}
free(sslConfig);
}
void replaceSpaceWithPlus(char *stringToProcess) {
for(int i = 0; i < strlen(stringToProcess); i++) {
if(stringToProcess[i] == ' ') {
stringToProcess[i] = '+';
}
}
}
char *assembleTargetUrl(const char *basePath,
const char *operationParameter,
list_t *queryParameters) {
int neededBufferSizeForQueryParameters = 0;
listEntry_t *listEntry;
if(queryParameters != NULL) {
list_ForEach(listEntry, queryParameters) {
keyValuePair_t *pair = listEntry->data;
neededBufferSizeForQueryParameters +=
strlen(pair->key) + strlen(pair->value);
}
neededBufferSizeForQueryParameters +=
(queryParameters->count * 2); // each keyValuePair is separated by a = and a & except the last, but this makes up for the ? at the beginning
}
int operationParameterLength = 0;
int basePathLength = strlen(basePath);
if(operationParameter != NULL) {
operationParameterLength = (1 + strlen(operationParameter));
}
char *targetUrl =
malloc(
neededBufferSizeForQueryParameters + basePathLength + operationParameterLength +
1);
strcpy(targetUrl, basePath);
if(operationParameter != NULL) {
strcat(targetUrl, operationParameter);
}
if(queryParameters != NULL) {
strcat(targetUrl, "?");
list_ForEach(listEntry, queryParameters) {
keyValuePair_t *pair = listEntry->data;
replaceSpaceWithPlus(pair->key);
strcat(targetUrl, pair->key);
strcat(targetUrl, "=");
replaceSpaceWithPlus(pair->value);
strcat(targetUrl, pair->value);
if(listEntry->nextListEntry != NULL) {
strcat(targetUrl, "&");
}
}
}
return targetUrl;
}
char *assembleHeaderField(char *key, char *value) {
char *header = malloc(strlen(key) + strlen(value) + 3);
strcpy(header, key),
strcat(header, ": ");
strcat(header, value);
return header;
}
void postData(CURL *handle, const char *bodyParameters) {
curl_easy_setopt(handle, CURLOPT_POSTFIELDS, bodyParameters);
curl_easy_setopt(handle, CURLOPT_POSTFIELDSIZE_LARGE,
(curl_off_t)strlen(bodyParameters));
}
int lengthOfKeyPair(keyValuePair_t *keyPair) {
long length = 0;
if((keyPair->key != NULL) &&
(keyPair->value != NULL) )
{
length = strlen(keyPair->key) + strlen(keyPair->value);
return length;
}
return 0;
}
void apiClient_invoke(apiClient_t *apiClient,
const char *operationParameter,
list_t *queryParameters,
list_t *headerParameters,
list_t *formParameters,
list_t *headerType,
list_t *contentType,
const char *bodyParameters,
const char *requestType) {
CURL *handle = curl_easy_init();
CURLcode res;
if(handle) {
listEntry_t *listEntry;
curl_mime *mime = NULL;
struct curl_slist *headers = NULL;
char *buffContent = NULL;
char *buffHeader = NULL;
binary_t *fileVar = NULL;
char *formString = NULL;
if(headerType != NULL) {
list_ForEach(listEntry, headerType) {
if(strstr((char *) listEntry->data,
"xml") == NULL)
{
buffHeader = malloc(strlen(
"Accept: ") +
strlen((char *)
listEntry->
data) + 1);
sprintf(buffHeader, "%s%s", "Accept: ",
(char *) listEntry->data);
headers = curl_slist_append(headers,
buffHeader);
free(buffHeader);
}
}
}
if(contentType != NULL) {
list_ForEach(listEntry, contentType) {
if(strstr((char *) listEntry->data,
"xml") == NULL)
{
buffContent =
malloc(strlen(
"Content-Type: ") + strlen(
(char *)
listEntry->data) +
1);
sprintf(buffContent, "%s%s",
"Content-Type: ",
(char *) listEntry->data);
headers = curl_slist_append(headers,
buffContent);
free(buffContent);
buffContent = NULL;
}
}
} else {
headers = curl_slist_append(headers,
"Content-Type: application/json");
}
if(requestType != NULL) {
curl_easy_setopt(handle, CURLOPT_CUSTOMREQUEST,
requestType);
}
if(formParameters != NULL) {
if(contentType &&
findStrInStrList(contentType, "application/x-www-form-urlencoded") != NULL)
{
long parameterLength = 0;
long keyPairLength = 0;
list_ForEach(listEntry, formParameters) {
keyValuePair_t *keyPair =
listEntry->data;
keyPairLength =
lengthOfKeyPair(keyPair) + 1;
if(listEntry->nextListEntry != NULL) {
parameterLength++;
}
parameterLength = parameterLength +
keyPairLength;
}
formString = malloc(parameterLength + 1);
memset(formString, 0, parameterLength + 1);
list_ForEach(listEntry, formParameters) {
keyValuePair_t *keyPair =
listEntry->data;
if((keyPair->key != NULL) &&
(keyPair->value != NULL) )
{
strcat(formString,
keyPair->key);
strcat(formString, "=");
strcat(formString,
keyPair->value);
if(listEntry->nextListEntry !=
NULL)
{
strcat(formString, "&");
}
}
}
curl_easy_setopt(handle, CURLOPT_POSTFIELDS,
formString);
}
if(contentType &&
findStrInStrList(contentType, "multipart/form-data") != NULL) {
mime = curl_mime_init(handle);
list_ForEach(listEntry, formParameters) {
keyValuePair_t *keyValuePair =
listEntry->data;
if((keyValuePair->key != NULL) &&
(keyValuePair->value != NULL) )
{
curl_mimepart *part =
curl_mime_addpart(mime);
curl_mime_name(part,
keyValuePair->key);
if(strcmp(keyValuePair->key,
"file") == 0)
{
memcpy(&fileVar,
keyValuePair->value,
sizeof(fileVar));
curl_mime_data(part,
fileVar->data,
fileVar->len);
curl_mime_filename(part,
"image.png");
} else {
curl_mime_data(part,
keyValuePair->value,
CURL_ZERO_TERMINATED);
}
}
}
curl_easy_setopt(handle, CURLOPT_MIMEPOST,
mime);
}
}
list_ForEach(listEntry, headerParameters) {
keyValuePair_t *keyValuePair = listEntry->data;
if((keyValuePair->key != NULL) &&
(keyValuePair->value != NULL) )
{
char *headerValueToWrite = assembleHeaderField(
keyValuePair->key, keyValuePair->value);
curl_slist_append(headers, headerValueToWrite);
free(headerValueToWrite);
}
}
if ( strstr(apiClient->basePath, "https") != NULL ) {
if ( apiClient->sslConfig ) {
if( apiClient->sslConfig->clientCertFile ) {
curl_easy_setopt(handle, CURLOPT_SSLCERT, apiClient->sslConfig->clientCertFile);
}
if( apiClient->sslConfig->clientKeyFile ) {
curl_easy_setopt(handle, CURLOPT_SSLKEY, apiClient->sslConfig->clientKeyFile);
}
if( apiClient->sslConfig->CACertFile ) {
curl_easy_setopt(handle, CURLOPT_CAINFO, apiClient->sslConfig->CACertFile);
}
if ( 1 == apiClient->sslConfig->insecureSkipTlsVerify ) {
curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(handle, CURLOPT_SSL_VERIFYHOST, 0L);
} else {
curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 1L);
curl_easy_setopt(handle, CURLOPT_SSL_VERIFYHOST, 2L);
}
} else {
curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_setopt(handle, CURLOPT_SSL_VERIFYHOST, 0L);
}
}
if (apiClient->progress_func != NULL) {
curl_easy_setopt(handle, CURLOPT_XFERINFOFUNCTION, apiClient->progress_func);
if (apiClient->progress_data != NULL) {
curl_easy_setopt(handle, CURLOPT_XFERINFODATA, apiClient->progress_data);
}
curl_easy_setopt(handle, CURLOPT_NOPROGRESS, 0L);
}
// this would only be generated for apiKey authentication
if (apiClient->apiKeys_api_key != NULL)
{
list_ForEach(listEntry, apiClient->apiKeys_api_key) {
keyValuePair_t *apiKey = listEntry->data;
if((apiKey->key != NULL) &&
(apiKey->value != NULL) )
{
char *headerValueToWrite = assembleHeaderField(
apiKey->key, apiKey->value);
curl_slist_append(headers, headerValueToWrite);
free(headerValueToWrite);
}
}
}
char *targetUrl =
assembleTargetUrl(apiClient->basePath,
operationParameter,
queryParameters);
curl_easy_setopt(handle, CURLOPT_URL, targetUrl);
curl_easy_setopt(handle,
CURLOPT_WRITEFUNCTION,
writeDataCallback);
curl_easy_setopt(handle,
CURLOPT_WRITEDATA,
apiClient);
curl_easy_setopt(handle, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(handle, CURLOPT_VERBOSE, 0); // to get curl debug msg 0: to disable, 1L:to enable
// this would only be generated for OAuth2 authentication
if(apiClient->accessToken != NULL) {
// curl_easy_setopt(handle, CURLOPT_HTTPAUTH, CURLAUTH_BEARER);
curl_easy_setopt(handle,
CURLOPT_XOAUTH2_BEARER,
apiClient->accessToken);
}
if(bodyParameters != NULL) {
postData(handle, bodyParameters);
}
res = curl_easy_perform(handle);
curl_slist_free_all(headers);
free(targetUrl);
if(res == CURLE_OK) {
curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, &apiClient->response_code);
} else {
char *url,*ip,*scheme;
long port;
curl_easy_getinfo(handle, CURLINFO_EFFECTIVE_URL, &url);
curl_easy_getinfo(handle, CURLINFO_PRIMARY_IP, &ip);
curl_easy_getinfo(handle, CURLINFO_PRIMARY_PORT, &port);
curl_easy_getinfo(handle, CURLINFO_SCHEME, &scheme);
fprintf(stderr, "curl_easy_perform() failed\n\nURL: %s\nIP: %s\nPORT: %li\nSCHEME: %s\nStrERROR: %s\n",url,ip,port,scheme,
curl_easy_strerror(res));
}
curl_easy_cleanup(handle);
if(formParameters != NULL) {
free(formString);
curl_mime_free(mime);
}
}
}
size_t writeDataCallback(void *buffer, size_t size, size_t nmemb, void *userp) {
size_t size_this_time = nmemb * size;
apiClient_t *apiClient = (apiClient_t *)userp;
apiClient->dataReceived = (char *)realloc( apiClient->dataReceived, apiClient->dataReceivedLen + size_this_time + 1);
memcpy((char *)apiClient->dataReceived + apiClient->dataReceivedLen, buffer, size_this_time);
apiClient->dataReceivedLen += size_this_time;
((char*)apiClient->dataReceived)[apiClient->dataReceivedLen] = '\0'; // the space size of (apiClient->dataReceived) = dataReceivedLen + 1
if (apiClient->data_callback_func) {
apiClient->data_callback_func(&apiClient->dataReceived, &apiClient->dataReceivedLen);
}
return size_this_time;
}
char *strReplace(char *orig, char *rep, char *with) {
char *result; // the return string
char *ins; // the next insert point
char *tmp; // varies
int lenRep; // length of rep (the string to remove)
int lenWith; // length of with (the string to replace rep with)
int lenFront; // distance between rep and end of last rep
int count; // number of replacements
// sanity checks and initialization
if(!orig || !rep)
{
return NULL;
}
lenRep = strlen(rep);
if(lenRep == 0) {
return NULL; // empty rep causes infinite loop during count
}
if(!with) {
with = "";
}
lenWith = strlen(with);
// count the number of replacements needed
ins = orig;
for(count = 0; tmp = strstr(ins, rep); ++count) {
ins = tmp + lenRep;
}
tmp = result = malloc(strlen(orig) + (lenWith - lenRep) * count + 1);
if(!result) {
return NULL;
}
char *originalPointer = orig; // copying original pointer to free the memory
// first time through the loop, all the variable are set correctly
// from here on,
// tmp points to the end of the result string
// ins points to the next occurrence of rep in orig
// orig points to the remainder of orig after "end of rep"
while(count--) {
ins = strstr(orig, rep);
lenFront = ins - orig;
tmp = strncpy(tmp, orig, lenFront) + lenFront;
tmp = strcpy(tmp, with) + lenWith;
orig += lenFront + lenRep; // move to next "end of rep"
}
strcpy(tmp, orig);
free(originalPointer);
return result;
}
void apiClient_setupGlobalEnv() {
curl_global_init(CURL_GLOBAL_ALL);
}
void apiClient_unsetupGlobalEnv() {
curl_global_cleanup();
}

View File

@ -0,0 +1,20 @@
#include <stdlib.h>
#include <string.h>
#include "../include/keyValuePair.h"
keyValuePair_t *keyValuePair_create(char *key, void *value) {
keyValuePair_t *keyValuePair = malloc(sizeof(keyValuePair_t));
keyValuePair->key = key;
keyValuePair->value = value;
return keyValuePair;
}
keyValuePair_t* keyValuePair_create_allocate(char* key, double value) {
double* boolpointer = malloc(sizeof(value));
memcpy(boolpointer, &value, sizeof(value));
return keyValuePair_create(key, boolpointer);
}
void keyValuePair_free(keyValuePair_t *keyValuePair) {
free(keyValuePair);
}

View File

@ -0,0 +1,58 @@
#include <stdlib.h>
#include <string.h>
#include "../include/binary.h"
#ifdef OPENSSL
#include "openssl/pem.h"
#endif
binary_t* instantiate_binary_t(char* data, int len) {
binary_t* ret = malloc(sizeof(struct binary_t));
ret->len=len;
ret->data = malloc(len);
memcpy(ret->data, data, len);
return ret;
}
char *base64encode (const void *b64_encode_this, int encode_this_many_bytes){
#ifdef OPENSSL
BIO *b64_bio, *mem_bio; //Declares two OpenSSL BIOs: a base64 filter and a memory BIO.
BUF_MEM *mem_bio_mem_ptr; //Pointer to a "memory BIO" structure holding our base64 data.
b64_bio = BIO_new(BIO_f_base64()); //Initialize our base64 filter BIO.
mem_bio = BIO_new(BIO_s_mem()); //Initialize our memory sink BIO.
BIO_push(b64_bio, mem_bio); //Link the BIOs by creating a filter-sink BIO chain.
BIO_set_flags(b64_bio, BIO_FLAGS_BASE64_NO_NL); //No newlines every 64 characters or less.
BIO_write(b64_bio, b64_encode_this, encode_this_many_bytes); //Records base64 encoded data.
BIO_flush(b64_bio); //Flush data. Necessary for b64 encoding, because of pad characters.
BIO_get_mem_ptr(mem_bio, &mem_bio_mem_ptr); //Store address of mem_bio's memory structure.
BIO_set_close(mem_bio, BIO_NOCLOSE); //Permit access to mem_ptr after BIOs are destroyed.
BIO_free_all(b64_bio); //Destroys all BIOs in chain, starting with b64 (i.e. the 1st one).
BUF_MEM_grow(mem_bio_mem_ptr, (*mem_bio_mem_ptr).length + 1); //Makes space for end null.
(*mem_bio_mem_ptr).data[(*mem_bio_mem_ptr).length] = '\0'; //Adds null-terminator to tail.
return (*mem_bio_mem_ptr).data; //Returns base-64 encoded data. (See: "buf_mem_st" struct).
#else // OPENSSL
#warning Data will not be encoded. If you want to use function "base64encode", please define "-DOPENSSL" when building the library.
return NULL;
#endif // OPENSSL
}
char *base64decode (const void *b64_decode_this, int decode_this_many_bytes, int *decoded_bytes){
#ifdef OPENSSL
BIO *b64_bio, *mem_bio; //Declares two OpenSSL BIOs: a base64 filter and a memory BIO.
char *base64_decoded = calloc( (decode_this_many_bytes*3)/4+1, sizeof(char) ); //+1 = null.
b64_bio = BIO_new(BIO_f_base64()); //Initialize our base64 filter BIO.
mem_bio = BIO_new(BIO_s_mem()); //Initialize our memory source BIO.
BIO_write(mem_bio, b64_decode_this, decode_this_many_bytes); //Base64 data saved in source.
BIO_push(b64_bio, mem_bio); //Link the BIOs by creating a filter-source BIO chain.
BIO_set_flags(b64_bio, BIO_FLAGS_BASE64_NO_NL); //Don't require trailing newlines.
int decoded_byte_index = 0; //Index where the next base64_decoded byte should be written.
while ( 0 < BIO_read(b64_bio, base64_decoded+decoded_byte_index, 1) ){ //Read byte-by-byte.
decoded_byte_index++; //Increment the index until read of BIO decoded data is complete.
} //Once we're done reading decoded data, BIO_read returns -1 even though there's no error.
BIO_free_all(b64_bio); //Destroys all BIOs in chain, starting with b64 (i.e. the 1st one).
*decoded_bytes = decoded_byte_index;
return base64_decoded; //Returns base-64 decoded data with trailing null terminator.
#else // OPENSSL
#warning Data will not be decoded. If you want to use function "base64decode", please define "-DOPENSSL" when building the library.
return NULL;
#endif // OPENSSL
}

View File

@ -0,0 +1,200 @@
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "../include/list.h"
static listEntry_t *listEntry_create(void *data) {
listEntry_t *createdListEntry = malloc(sizeof(listEntry_t));
if(createdListEntry == NULL) {
// TODO Malloc Failure
return NULL;
}
createdListEntry->data = data;
return createdListEntry;
}
void listEntry_free(listEntry_t *listEntry, void *additionalData) {
free(listEntry);
}
void listEntry_printAsInt(listEntry_t *listEntry, void *additionalData) {
printf("%i\n", *((int *) (listEntry->data)));
}
list_t *list_createList() {
list_t *createdList = malloc(sizeof(list_t));
if(createdList == NULL) {
// TODO Malloc Failure
return NULL;
}
createdList->firstEntry = NULL;
createdList->lastEntry = NULL;
createdList->count = 0;
return createdList;
}
void list_iterateThroughListForward(list_t *list,
void (*operationToPerform)(
listEntry_t *,
void *callbackFunctionUsedData),
void *additionalDataNeededForCallbackFunction)
{
listEntry_t *currentListEntry = list->firstEntry;
listEntry_t *nextListEntry;
if(currentListEntry == NULL) {
return;
}
nextListEntry = currentListEntry->nextListEntry;
operationToPerform(currentListEntry,
additionalDataNeededForCallbackFunction);
currentListEntry = nextListEntry;
while(currentListEntry != NULL) {
nextListEntry = currentListEntry->nextListEntry;
operationToPerform(currentListEntry,
additionalDataNeededForCallbackFunction);
currentListEntry = nextListEntry;
}
}
void list_iterateThroughListBackward(list_t *list,
void (*operationToPerform)(
listEntry_t *,
void *callbackFunctionUsedData),
void *additionalDataNeededForCallbackFunction)
{
listEntry_t *currentListEntry = list->lastEntry;
listEntry_t *nextListEntry = currentListEntry->prevListEntry;
if(currentListEntry == NULL) {
return;
}
operationToPerform(currentListEntry,
additionalDataNeededForCallbackFunction);
currentListEntry = nextListEntry;
while(currentListEntry != NULL) {
nextListEntry = currentListEntry->prevListEntry;
operationToPerform(currentListEntry,
additionalDataNeededForCallbackFunction);
currentListEntry = nextListEntry;
}
}
void list_freeList(list_t *list) {
if(list){
list_iterateThroughListForward(list, listEntry_free, NULL);
free(list);
}
}
void list_addElement(list_t *list, void *dataToAddInList) {
listEntry_t *newListEntry = listEntry_create(dataToAddInList);
if(newListEntry == NULL) {
// TODO Malloc Failure
return;
}
if(list->firstEntry == NULL) {
list->firstEntry = newListEntry;
list->lastEntry = newListEntry;
newListEntry->prevListEntry = NULL;
newListEntry->nextListEntry = NULL;
list->count++;
return;
}
list->lastEntry->nextListEntry = newListEntry;
newListEntry->prevListEntry = list->lastEntry;
newListEntry->nextListEntry = NULL;
list->lastEntry = newListEntry;
list->count++;
}
void list_removeElement(list_t *list, listEntry_t *elementToRemove) {
listEntry_t *elementBeforeElementToRemove =
elementToRemove->prevListEntry;
listEntry_t *elementAfterElementToRemove =
elementToRemove->nextListEntry;
if(elementBeforeElementToRemove != NULL) {
elementBeforeElementToRemove->nextListEntry =
elementAfterElementToRemove;
} else {
list->firstEntry = elementAfterElementToRemove;
}
if(elementAfterElementToRemove != NULL) {
elementAfterElementToRemove->prevListEntry =
elementBeforeElementToRemove;
} else {
list->lastEntry = elementBeforeElementToRemove;
}
listEntry_free(elementToRemove, NULL);
list->count--;
}
listEntry_t *list_getElementAt(list_t *list, long indexOfElement) {
listEntry_t *currentListEntry;
if((list->count / 2) > indexOfElement) {
currentListEntry = list->firstEntry;
for(int i = 0; i < indexOfElement; i++) {
currentListEntry = currentListEntry->nextListEntry;
}
return currentListEntry;
} else {
currentListEntry = list->lastEntry;
for(int i = 1; i < (list->count - indexOfElement); i++) {
currentListEntry = currentListEntry->prevListEntry;
}
return currentListEntry;
}
}
char* findStrInStrList(list_t *strList, const char *str)
{
if (!strList || !str) {
return NULL;
}
listEntry_t* listEntry = NULL;
list_ForEach(listEntry, strList) {
if (strstr((char*)listEntry->data, str) != NULL) {
return (char*)listEntry->data;
}
}
return NULL;
}
void clear_and_free_string_list(list_t *list)
{
if (!list) {
return;
}
listEntry_t *listEntry = NULL;
list_ForEach(listEntry, list) {
char *list_item = listEntry->data;
free(list_item);
list_item = NULL;
}
list_freeList(list);
}

View File

@ -0,0 +1,210 @@
tok_split_gte=false
utf8_byte=false
utf8_force=true
indent_cmt_with_tabs=false
indent_align_string=false
indent_braces=false
indent_braces_no_func=false
indent_braces_no_class=false
indent_braces_no_struct=false
indent_brace_parent=false
indent_namespace=false
indent_extern=true
indent_class=false
indent_class_colon=false
indent_else_if=false
indent_var_def_cont=false
indent_func_call_param=false
indent_func_def_param=false
indent_func_proto_param=false
indent_func_class_param=false
indent_func_ctor_var_param=false
indent_template_param=false
indent_func_param_double=false
indent_relative_single_line_comments=false
indent_col1_comment=false
indent_access_spec_body=false
indent_paren_nl=false
indent_comma_paren=false
indent_bool_paren=false
indent_first_bool_expr=false
indent_square_nl=false
indent_preserve_sql=false
indent_align_assign=true
sp_balance_nested_parens=false
align_keep_tabs=false
align_with_tabs=true
align_on_tabstop=true
align_func_params=true
align_same_func_call_params=false
align_var_def_colon=false
align_var_def_attribute=false
align_var_def_inline=false
align_right_cmt_mix=false
align_on_operator=false
align_mix_var_proto=false
align_single_line_func=false
align_single_line_brace=false
align_nl_cont=false
align_left_shift=true
align_oc_decl_colon=false
nl_collapse_empty_body=true
nl_assign_leave_one_liners=false
nl_class_leave_one_liners=false
nl_enum_leave_one_liners=false
nl_getset_leave_one_liners=false
nl_func_leave_one_liners=false
nl_if_leave_one_liners=false
nl_multi_line_cond=true
nl_multi_line_define=false
nl_before_case=true
nl_after_case=true
nl_after_return=false
nl_after_semicolon=true
nl_after_brace_open=false
nl_after_brace_open_cmt=false
nl_after_vbrace_open=false
nl_after_vbrace_open_empty=false
nl_after_brace_close=false
nl_after_vbrace_close=false
nl_define_macro=false
nl_squeeze_ifdef=false
nl_ds_struct_enum_cmt=false
nl_ds_struct_enum_close_brace=false
nl_create_if_one_liner=false
nl_create_for_one_liner=false
nl_create_while_one_liner=false
ls_for_split_full=false
ls_func_split_full=false
nl_after_multiline_comment=false
eat_blanks_after_open_brace=true
eat_blanks_before_close_brace=true
mod_full_brace_if_chain=false
mod_pawn_semicolon=false
mod_full_paren_if_bool=true
mod_remove_extra_semicolon=true
mod_sort_import=true
mod_sort_using=false
mod_sort_include=false
mod_move_case_break=false
mod_remove_empty_return=true
cmt_indent_multi=true
cmt_c_group=false
cmt_c_nl_start=true
cmt_c_nl_end=true
cmt_cpp_group=false
cmt_cpp_nl_start=true
cmt_cpp_nl_end=true
cmt_cpp_to_c=false
cmt_star_cont=false
cmt_multi_check_last=true
cmt_insert_before_preproc=false
pp_indent_at_level=false
pp_region_indent_code=false
pp_if_indent_code=false
pp_define_at_level=false
align_var_def_star_style=1
align_var_def_amp_style=0
code_width=80
indent_with_tabs=1
sp_arith=force
sp_assign=force
sp_assign_default=force
sp_enum_assign=force
sp_bool=force
sp_compare=force
sp_inside_paren=remove
sp_before_ptr_star=force
sp_before_unnamed_ptr_star=force
sp_between_ptr_star=remove
sp_after_ptr_star=remove
sp_before_sparen=remove
sp_inside_sparen=remove
sp_sparen_brace=force
sp_before_semi=remove
sp_before_semi_for_empty=force
sp_after_semi=force
sp_after_semi_for=force
sp_after_semi_for_empty=force
sp_before_square=remove
sp_before_squares=remove
sp_inside_square=remove
sp_after_comma=force
sp_before_comma=remove
sp_paren_comma=force
sp_before_case_colon=remove
sp_after_cast=force
sp_inside_paren_cast=remove
sp_sizeof_paren=remove
sp_inside_braces_struct=force
sp_type_func=remove
sp_func_proto_paren=remove
sp_func_def_paren=remove
sp_inside_fparens=remove
sp_inside_fparen=remove
sp_square_fparen=remove
sp_fparen_brace=force
sp_func_call_paren=remove
sp_attribute_paren=remove
sp_defined_paren=remove
sp_macro=force
sp_macro_func=force
sp_else_brace=force
sp_brace_else=force
sp_brace_typedef=force
sp_not=remove
sp_inv=remove
sp_addr=remove
sp_member=remove
sp_deref=remove
sp_sign=remove
sp_incdec=remove
sp_before_nl_cont=force
sp_cond_colon=force
sp_cond_question=force
sp_case_label=force
sp_cmt_cpp_start=force
sp_endif_cmt=force
sp_before_tr_emb_cmt=force
nl_start_of_file=remove
nl_end_of_file=add
nl_assign_brace=remove
nl_enum_brace=remove
nl_struct_brace=remove
nl_union_brace=remove
nl_if_brace=remove
nl_brace_else=remove
nl_elseif_brace=remove
nl_else_brace=remove
nl_else_if=remove
nl_brace_finally=remove
nl_finally_brace=remove
nl_try_brace=remove
nl_for_brace=remove
nl_catch_brace=remove
nl_brace_catch=remove
nl_while_brace=remove
nl_do_brace=remove
nl_brace_while=remove
nl_switch_brace=remove
nl_class_brace=remove
nl_func_type_name=remove
nl_func_proto_type_name=remove
nl_func_paren=remove
nl_func_def_paren=remove
nl_func_decl_start=remove
nl_func_def_start=remove
nl_func_decl_args=remove
nl_func_def_args=remove
nl_func_decl_end=remove
nl_func_def_end=remove
nl_func_decl_empty=remove
nl_func_def_empty=remove
nl_fdef_brace=remove
nl_return_expr=remove
pos_bool=trail_break
mod_full_brace_do=force
mod_full_brace_for=force
mod_full_brace_if=force
mod_full_brace_while=force
mod_paren_on_return=remove

View File

@ -0,0 +1,62 @@
#ifndef api_response_TEST
#define api_response_TEST
// the following is to include only the main from the first c file
#ifndef TEST_MAIN
#define TEST_MAIN
#define api_response_MAIN
#endif // TEST_MAIN
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "../external/cJSON.h"
#include "../model/api_response.h"
api_response_t* instantiate_api_response(int include_optional);
api_response_t* instantiate_api_response(int include_optional) {
api_response_t* api_response = NULL;
if (include_optional) {
api_response = api_response_create(
56,
"0",
"0"
);
} else {
api_response = api_response_create(
56,
"0",
"0"
);
}
return api_response;
}
#ifdef api_response_MAIN
void test_api_response(int include_optional) {
api_response_t* api_response_1 = instantiate_api_response(include_optional);
cJSON* jsonapi_response_1 = api_response_convertToJSON(api_response_1);
printf("api_response :\n%s\n", cJSON_PrintUnformatted(jsonapi_response_1));
api_response_t* api_response_2 = api_response_parseFromJSON(jsonapi_response_1);
cJSON* jsonapi_response_2 = api_response_convertToJSON(api_response_2);
printf("repeating api_response:\n%s\n", cJSON_PrintUnformatted(jsonapi_response_2));
}
int main() {
test_api_response(1);
test_api_response(0);
printf("Hello world \n");
return 0;
}
#endif // api_response_MAIN
#endif // api_response_TEST

View File

@ -0,0 +1,60 @@
#ifndef category_TEST
#define category_TEST
// the following is to include only the main from the first c file
#ifndef TEST_MAIN
#define TEST_MAIN
#define category_MAIN
#endif // TEST_MAIN
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "../external/cJSON.h"
#include "../model/category.h"
category_t* instantiate_category(int include_optional);
category_t* instantiate_category(int include_optional) {
category_t* category = NULL;
if (include_optional) {
category = category_create(
56,
"0"
);
} else {
category = category_create(
56,
"0"
);
}
return category;
}
#ifdef category_MAIN
void test_category(int include_optional) {
category_t* category_1 = instantiate_category(include_optional);
cJSON* jsoncategory_1 = category_convertToJSON(category_1);
printf("category :\n%s\n", cJSON_PrintUnformatted(jsoncategory_1));
category_t* category_2 = category_parseFromJSON(jsoncategory_1);
cJSON* jsoncategory_2 = category_convertToJSON(category_2);
printf("repeating category:\n%s\n", cJSON_PrintUnformatted(jsoncategory_2));
}
int main() {
test_category(1);
test_category(0);
printf("Hello world \n");
return 0;
}
#endif // category_MAIN
#endif // category_TEST

View File

@ -0,0 +1,60 @@
#ifndef mapped_model_TEST
#define mapped_model_TEST
// the following is to include only the main from the first c file
#ifndef TEST_MAIN
#define TEST_MAIN
#define mapped_model_MAIN
#endif // TEST_MAIN
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "../external/cJSON.h"
#include "../model/mapped_model.h"
MappedModel_t* instantiate_MappedModel(int include_optional);
MappedModel_t* instantiate_MappedModel(int include_optional) {
MappedModel_t* MappedModel = NULL;
if (include_optional) {
MappedModel = MappedModel_create(
56,
"0"
);
} else {
MappedModel = MappedModel_create(
56,
"0"
);
}
return MappedModel;
}
#ifdef mapped_model_MAIN
void test_MappedModel(int include_optional) {
MappedModel_t* MappedModel_1 = instantiate_MappedModel(include_optional);
cJSON* jsonMappedModel_1 = MappedModel_convertToJSON(MappedModel_1);
printf("MappedModel :\n%s\n", cJSON_PrintUnformatted(jsonMappedModel_1));
MappedModel_t* MappedModel_2 = MappedModel_parseFromJSON(jsonMappedModel_1);
cJSON* jsonMappedModel_2 = MappedModel_convertToJSON(MappedModel_2);
printf("repeating MappedModel:\n%s\n", cJSON_PrintUnformatted(jsonMappedModel_2));
}
int main() {
test_MappedModel(1);
test_MappedModel(0);
printf("Hello world \n");
return 0;
}
#endif // mapped_model_MAIN
#endif // mapped_model_TEST

View File

@ -0,0 +1,60 @@
#ifndef model_with_set_propertes_TEST
#define model_with_set_propertes_TEST
// the following is to include only the main from the first c file
#ifndef TEST_MAIN
#define TEST_MAIN
#define model_with_set_propertes_MAIN
#endif // TEST_MAIN
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "../external/cJSON.h"
#include "../model/model_with_set_propertes.h"
model_with_set_propertes_t* instantiate_model_with_set_propertes(int include_optional);
model_with_set_propertes_t* instantiate_model_with_set_propertes(int include_optional) {
model_with_set_propertes_t* model_with_set_propertes = NULL;
if (include_optional) {
model_with_set_propertes = model_with_set_propertes_create(
list_createList(),
list_createList()
);
} else {
model_with_set_propertes = model_with_set_propertes_create(
list_createList(),
list_createList()
);
}
return model_with_set_propertes;
}
#ifdef model_with_set_propertes_MAIN
void test_model_with_set_propertes(int include_optional) {
model_with_set_propertes_t* model_with_set_propertes_1 = instantiate_model_with_set_propertes(include_optional);
cJSON* jsonmodel_with_set_propertes_1 = model_with_set_propertes_convertToJSON(model_with_set_propertes_1);
printf("model_with_set_propertes :\n%s\n", cJSON_PrintUnformatted(jsonmodel_with_set_propertes_1));
model_with_set_propertes_t* model_with_set_propertes_2 = model_with_set_propertes_parseFromJSON(jsonmodel_with_set_propertes_1);
cJSON* jsonmodel_with_set_propertes_2 = model_with_set_propertes_convertToJSON(model_with_set_propertes_2);
printf("repeating model_with_set_propertes:\n%s\n", cJSON_PrintUnformatted(jsonmodel_with_set_propertes_2));
}
int main() {
test_model_with_set_propertes(1);
test_model_with_set_propertes(0);
printf("Hello world \n");
return 0;
}
#endif // model_with_set_propertes_MAIN
#endif // model_with_set_propertes_TEST

View File

@ -0,0 +1,68 @@
#ifndef order_TEST
#define order_TEST
// the following is to include only the main from the first c file
#ifndef TEST_MAIN
#define TEST_MAIN
#define order_MAIN
#endif // TEST_MAIN
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "../external/cJSON.h"
#include "../model/order.h"
order_t* instantiate_order(int include_optional);
order_t* instantiate_order(int include_optional) {
order_t* order = NULL;
if (include_optional) {
order = order_create(
56,
56,
56,
"2013-10-20T19:20:30+01:00",
openapi_petstore_order_STATUS_placed,
1
);
} else {
order = order_create(
56,
56,
56,
"2013-10-20T19:20:30+01:00",
openapi_petstore_order_STATUS_placed,
1
);
}
return order;
}
#ifdef order_MAIN
void test_order(int include_optional) {
order_t* order_1 = instantiate_order(include_optional);
cJSON* jsonorder_1 = order_convertToJSON(order_1);
printf("order :\n%s\n", cJSON_PrintUnformatted(jsonorder_1));
order_t* order_2 = order_parseFromJSON(jsonorder_1);
cJSON* jsonorder_2 = order_convertToJSON(order_2);
printf("repeating order:\n%s\n", cJSON_PrintUnformatted(jsonorder_2));
}
int main() {
test_order(1);
test_order(0);
printf("Hello world \n");
return 0;
}
#endif // order_MAIN
#endif // order_TEST

View File

@ -0,0 +1,70 @@
#ifndef pet_TEST
#define pet_TEST
// the following is to include only the main from the first c file
#ifndef TEST_MAIN
#define TEST_MAIN
#define pet_MAIN
#endif // TEST_MAIN
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "../external/cJSON.h"
#include "../model/pet.h"
pet_t* instantiate_pet(int include_optional);
#include "test_category.c"
pet_t* instantiate_pet(int include_optional) {
pet_t* pet = NULL;
if (include_optional) {
pet = pet_create(
56,
// false, not to have infinite recursion
instantiate_category(0),
"doggie",
list_createList(),
list_createList(),
openapi_petstore_pet_STATUS_available
);
} else {
pet = pet_create(
56,
NULL,
"doggie",
list_createList(),
list_createList(),
openapi_petstore_pet_STATUS_available
);
}
return pet;
}
#ifdef pet_MAIN
void test_pet(int include_optional) {
pet_t* pet_1 = instantiate_pet(include_optional);
cJSON* jsonpet_1 = pet_convertToJSON(pet_1);
printf("pet :\n%s\n", cJSON_PrintUnformatted(jsonpet_1));
pet_t* pet_2 = pet_parseFromJSON(jsonpet_1);
cJSON* jsonpet_2 = pet_convertToJSON(pet_2);
printf("repeating pet:\n%s\n", cJSON_PrintUnformatted(jsonpet_2));
}
int main() {
test_pet(1);
test_pet(0);
printf("Hello world \n");
return 0;
}
#endif // pet_MAIN
#endif // pet_TEST

View File

@ -0,0 +1,60 @@
#ifndef tag_TEST
#define tag_TEST
// the following is to include only the main from the first c file
#ifndef TEST_MAIN
#define TEST_MAIN
#define tag_MAIN
#endif // TEST_MAIN
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "../external/cJSON.h"
#include "../model/tag.h"
tag_t* instantiate_tag(int include_optional);
tag_t* instantiate_tag(int include_optional) {
tag_t* tag = NULL;
if (include_optional) {
tag = tag_create(
56,
"0"
);
} else {
tag = tag_create(
56,
"0"
);
}
return tag;
}
#ifdef tag_MAIN
void test_tag(int include_optional) {
tag_t* tag_1 = instantiate_tag(include_optional);
cJSON* jsontag_1 = tag_convertToJSON(tag_1);
printf("tag :\n%s\n", cJSON_PrintUnformatted(jsontag_1));
tag_t* tag_2 = tag_parseFromJSON(jsontag_1);
cJSON* jsontag_2 = tag_convertToJSON(tag_2);
printf("repeating tag:\n%s\n", cJSON_PrintUnformatted(jsontag_2));
}
int main() {
test_tag(1);
test_tag(0);
printf("Hello world \n");
return 0;
}
#endif // tag_MAIN
#endif // tag_TEST

View File

@ -0,0 +1,72 @@
#ifndef user_TEST
#define user_TEST
// the following is to include only the main from the first c file
#ifndef TEST_MAIN
#define TEST_MAIN
#define user_MAIN
#endif // TEST_MAIN
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
#include "../external/cJSON.h"
#include "../model/user.h"
user_t* instantiate_user(int include_optional);
user_t* instantiate_user(int include_optional) {
user_t* user = NULL;
if (include_optional) {
user = user_create(
56,
"0",
"0",
"0",
"0",
"0",
"0",
56
);
} else {
user = user_create(
56,
"0",
"0",
"0",
"0",
"0",
"0",
56
);
}
return user;
}
#ifdef user_MAIN
void test_user(int include_optional) {
user_t* user_1 = instantiate_user(include_optional);
cJSON* jsonuser_1 = user_convertToJSON(user_1);
printf("user :\n%s\n", cJSON_PrintUnformatted(jsonuser_1));
user_t* user_2 = user_parseFromJSON(jsonuser_1);
cJSON* jsonuser_2 = user_convertToJSON(user_2);
printf("repeating user:\n%s\n", cJSON_PrintUnformatted(jsonuser_2));
}
int main() {
test_user(1);
test_user(0);
printf("Hello world \n");
return 0;
}
#endif // user_MAIN
#endif // user_TEST

View File

@ -1,7 +1,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "MappedModel.h"
#include "mapped_model.h"

View File

@ -1,5 +1,5 @@
/*
* MappedModel.h
* mapped_model.h
*
* to test mapping features
*/