forked from loafle/openapi-generator-original
Fix a few issues with the C generator (part 2) (#20227)
* [C] Don't convert post body strings to JSON If the body provided for the api request is a just a string itself, don't try to convert it to JSON, simply submit the string. * [C] Implement BearerToken authentication * [C] Handle nullable fields correctly * [C] Fix implementation of FromString for enums * [C] Update the test schemas to cover the changes * Update samples * Fix the updated samples * [C] Add the new samples folder to the CI workflow
This commit is contained in:
parent
387fd9986c
commit
52b5b8fb76
@ -5,10 +5,12 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'samples/client/petstore/c/**'
|
- 'samples/client/petstore/c/**'
|
||||||
- 'samples/client/petstore/c-useJsonUnformatted/**'
|
- 'samples/client/petstore/c-useJsonUnformatted/**'
|
||||||
|
- 'samples/client/others/c/bearerAuth/**'
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- 'samples/client/petstore/c/**'
|
- 'samples/client/petstore/c/**'
|
||||||
- 'samples/client/petstore/c-useJsonUnformatted/**'
|
- 'samples/client/petstore/c-useJsonUnformatted/**'
|
||||||
|
- 'samples/client/others/c/bearerAuth/**'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@ -20,6 +22,7 @@ jobs:
|
|||||||
sample:
|
sample:
|
||||||
- 'samples/client/petstore/c/'
|
- 'samples/client/petstore/c/'
|
||||||
- 'samples/client/petstore/c-useJsonUnformatted/'
|
- 'samples/client/petstore/c-useJsonUnformatted/'
|
||||||
|
- 'samples/client/others/c/bearerAuth/'
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
4
bin/configs/c-bearer-auth.yaml
Normal file
4
bin/configs/c-bearer-auth.yaml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
generatorName: c
|
||||||
|
outputDir: samples/client/others/c/bearerAuth
|
||||||
|
inputSpec: modules/openapi-generator/src/test/resources/3_0/c/bearer_auth.yaml
|
||||||
|
templateDir: modules/openapi-generator/src/main/resources/C-libcurl
|
@ -324,6 +324,10 @@ end:
|
|||||||
}
|
}
|
||||||
{{/isArray}}
|
{{/isArray}}
|
||||||
{{^isArray}}
|
{{^isArray}}
|
||||||
|
{{#isString}}
|
||||||
|
localVarBodyParameters = strdup({{paramName}});
|
||||||
|
{{/isString}}
|
||||||
|
{{^isString}}
|
||||||
cJSON *localVarSingleItemJSON_{{paramName}} = NULL;
|
cJSON *localVarSingleItemJSON_{{paramName}} = NULL;
|
||||||
if ({{paramName}} != NULL)
|
if ({{paramName}} != NULL)
|
||||||
{
|
{
|
||||||
@ -331,6 +335,7 @@ end:
|
|||||||
localVarSingleItemJSON_{{paramName}} = {{dataType}}_convertToJSON({{paramName}});
|
localVarSingleItemJSON_{{paramName}} = {{dataType}}_convertToJSON({{paramName}});
|
||||||
localVarBodyParameters = {{{cJSONPrint}}}(localVarSingleItemJSON_{{paramName}});
|
localVarBodyParameters = {{{cJSONPrint}}}(localVarSingleItemJSON_{{paramName}});
|
||||||
}
|
}
|
||||||
|
{{/isString}}
|
||||||
{{/isArray}}
|
{{/isArray}}
|
||||||
{{/bodyParam}}
|
{{/bodyParam}}
|
||||||
{{#produces}}
|
{{#produces}}
|
||||||
@ -458,10 +463,12 @@ end:
|
|||||||
free(localVarBodyParameters);
|
free(localVarBodyParameters);
|
||||||
{{/isArray}}
|
{{/isArray}}
|
||||||
{{^isArray}}
|
{{^isArray}}
|
||||||
|
{{^isString}}
|
||||||
if (localVarSingleItemJSON_{{paramName}}) {
|
if (localVarSingleItemJSON_{{paramName}}) {
|
||||||
cJSON_Delete(localVarSingleItemJSON_{{paramName}});
|
cJSON_Delete(localVarSingleItemJSON_{{paramName}});
|
||||||
localVarSingleItemJSON_{{paramName}} = NULL;
|
localVarSingleItemJSON_{{paramName}} = NULL;
|
||||||
}
|
}
|
||||||
|
{{/isString}}
|
||||||
free(localVarBodyParameters);
|
free(localVarBodyParameters);
|
||||||
{{/isArray}}
|
{{/isArray}}
|
||||||
{{/bodyParams}}
|
{{/bodyParams}}
|
||||||
|
@ -22,6 +22,9 @@ apiClient_t *apiClient_create() {
|
|||||||
apiClient->username = NULL;
|
apiClient->username = NULL;
|
||||||
apiClient->password = NULL;
|
apiClient->password = NULL;
|
||||||
{{/isBasicBasic}}
|
{{/isBasicBasic}}
|
||||||
|
{{#isBasicBearer}}
|
||||||
|
apiClient->accessToken = NULL;
|
||||||
|
{{/isBasicBearer}}
|
||||||
{{#isOAuth}}
|
{{#isOAuth}}
|
||||||
apiClient->accessToken = NULL;
|
apiClient->accessToken = NULL;
|
||||||
{{/isOAuth}}
|
{{/isOAuth}}
|
||||||
@ -69,6 +72,9 @@ apiClient_t *apiClient_create_with_base_path(const char *basePath
|
|||||||
apiClient->username = NULL;
|
apiClient->username = NULL;
|
||||||
apiClient->password = NULL;
|
apiClient->password = NULL;
|
||||||
{{/isBasicBasic}}
|
{{/isBasicBasic}}
|
||||||
|
{{#isBasicBearer}}
|
||||||
|
apiClient->accessToken = NULL;
|
||||||
|
{{/isBasicBearer}}
|
||||||
{{#isOAuth}}
|
{{#isOAuth}}
|
||||||
apiClient->accessToken = NULL;
|
apiClient->accessToken = NULL;
|
||||||
{{/isOAuth}}
|
{{/isOAuth}}
|
||||||
@ -108,6 +114,11 @@ void apiClient_free(apiClient_t *apiClient) {
|
|||||||
free(apiClient->password);
|
free(apiClient->password);
|
||||||
}
|
}
|
||||||
{{/isBasicBasic}}
|
{{/isBasicBasic}}
|
||||||
|
{{#isBasicBearer}}
|
||||||
|
if(apiClient->accessToken) {
|
||||||
|
free(apiClient->accessToken);
|
||||||
|
}
|
||||||
|
{{/isBasicBearer}}
|
||||||
{{#isOAuth}}
|
{{#isOAuth}}
|
||||||
if(apiClient->accessToken) {
|
if(apiClient->accessToken) {
|
||||||
free(apiClient->accessToken);
|
free(apiClient->accessToken);
|
||||||
@ -467,6 +478,20 @@ void apiClient_invoke(apiClient_t *apiClient,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
{{/isApiKey}}
|
{{/isApiKey}}
|
||||||
|
{{#isBasicBearer}}
|
||||||
|
// this would only be generated for bearer token authentication
|
||||||
|
if(apiClient->accessToken != NULL)
|
||||||
|
{
|
||||||
|
int authHeaderSize;
|
||||||
|
char *authHeader = NULL;
|
||||||
|
|
||||||
|
authHeaderSize = snprintf(NULL, 0, "Authorization: Bearer %s", apiClient->accessToken) + 1;
|
||||||
|
authHeader = malloc(authHeaderSize);
|
||||||
|
snprintf(authHeader, authHeaderSize, "Authorization: Bearer %s", apiClient->accessToken);
|
||||||
|
headers = curl_slist_append(headers, authHeader);
|
||||||
|
free(authHeader);
|
||||||
|
}
|
||||||
|
{{/isBasicBearer}}
|
||||||
{{/authMethods}}
|
{{/authMethods}}
|
||||||
{{/hasAuthMethods}}
|
{{/hasAuthMethods}}
|
||||||
|
|
||||||
|
@ -34,6 +34,9 @@ typedef struct apiClient_t {
|
|||||||
char *username;
|
char *username;
|
||||||
char *password;
|
char *password;
|
||||||
{{/isBasicBasic}}
|
{{/isBasicBasic}}
|
||||||
|
{{#isBasicBearer}}
|
||||||
|
char *accessToken;
|
||||||
|
{{/isBasicBearer}}
|
||||||
{{#isOAuth}}
|
{{#isOAuth}}
|
||||||
char *accessToken;
|
char *accessToken;
|
||||||
{{/isOAuth}}
|
{{/isOAuth}}
|
||||||
|
@ -49,27 +49,20 @@ fail:
|
|||||||
}
|
}
|
||||||
|
|
||||||
{{projectName}}_{{classVarName}}_{{enumName}}_e {{classname}}_parseFromJSON(cJSON *{{classname}}JSON) {
|
{{projectName}}_{{classVarName}}_{{enumName}}_e {{classname}}_parseFromJSON(cJSON *{{classname}}JSON) {
|
||||||
{{projectName}}_{{classVarName}}_{{enumName}}_e *{{classname}} = NULL;
|
|
||||||
{{#isEnum}}
|
{{#isEnum}}
|
||||||
{{#isNumeric}}
|
{{#isNumeric}}
|
||||||
cJSON *{{{classname}}}Var = cJSON_GetObjectItemCaseSensitive({{classname}}JSON, "{{{classname}}}");
|
if(!cJSON_IsNumber({{{classname}}}JSON)) {
|
||||||
if(!cJSON_IsNumber({{{classname}}}Var))
|
return 0;
|
||||||
{
|
|
||||||
goto end;
|
|
||||||
}
|
}
|
||||||
|
return {{classname}}JSON->valueint;
|
||||||
{{/isNumeric}}
|
{{/isNumeric}}
|
||||||
{{#isString}}
|
{{#isString}}
|
||||||
{{projectName}}_{{classVarName}}_{{enumName}}_e {{classname}}Variable;
|
if(!cJSON_IsString({{{classname}}}JSON) || ({{{classname}}}JSON->valuestring == NULL)) {
|
||||||
cJSON *{{{classname}}}Var = cJSON_GetObjectItemCaseSensitive({{classname}}JSON, "{{{classname}}}");
|
return 0;
|
||||||
if(!cJSON_IsString({{{classname}}}Var) || ({{{classname}}}Var->valuestring == NULL)){
|
|
||||||
goto end;
|
|
||||||
}
|
}
|
||||||
{{classname}}Variable = {{classFilename}}_{{classname}}_FromString({{{classname}}}Var->valuestring);
|
return {{classFilename}}_{{classname}}_FromString({{{classname}}}JSON->valuestring);
|
||||||
{{/isString}}
|
{{/isString}}
|
||||||
{{/isEnum}}
|
{{/isEnum}}
|
||||||
return {{classname}}Variable;
|
|
||||||
end:
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
{{/isEnum}}
|
{{/isEnum}}
|
||||||
{{^isEnum}}
|
{{^isEnum}}
|
||||||
@ -623,6 +616,9 @@ fail:
|
|||||||
{{#vars}}
|
{{#vars}}
|
||||||
// {{{classname}}}->{{{name}}}
|
// {{{classname}}}->{{{name}}}
|
||||||
cJSON *{{{name}}} = cJSON_GetObjectItemCaseSensitive({{classname}}JSON, "{{{baseName}}}");
|
cJSON *{{{name}}} = cJSON_GetObjectItemCaseSensitive({{classname}}JSON, "{{{baseName}}}");
|
||||||
|
if (cJSON_IsNull({{{name}}})) {
|
||||||
|
{{{name}}} = NULL;
|
||||||
|
}
|
||||||
{{#required}}
|
{{#required}}
|
||||||
if (!{{{name}}}) {
|
if (!{{{name}}}) {
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -253,6 +253,26 @@ paths:
|
|||||||
- petstore_auth:
|
- petstore_auth:
|
||||||
- 'write:pets'
|
- 'write:pets'
|
||||||
- 'read:pets'
|
- 'read:pets'
|
||||||
|
/pet/picture:
|
||||||
|
post:
|
||||||
|
tags:
|
||||||
|
- pet
|
||||||
|
summary: Send a picture of your happy pet
|
||||||
|
description: ''
|
||||||
|
operationId: sharePicture
|
||||||
|
parameters:
|
||||||
|
- in: body
|
||||||
|
name: picture
|
||||||
|
description: A picture you want to share
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
description: Thank you message
|
||||||
'/pet/{petId}/uploadImage':
|
'/pet/{petId}/uploadImage':
|
||||||
post:
|
post:
|
||||||
tags:
|
tags:
|
||||||
@ -290,6 +310,31 @@ paths:
|
|||||||
- petstore_auth:
|
- petstore_auth:
|
||||||
- 'write:pets'
|
- 'write:pets'
|
||||||
- 'read:pets'
|
- 'read:pets'
|
||||||
|
'/pet/{petId}/isAvailable':
|
||||||
|
post:
|
||||||
|
tags:
|
||||||
|
- pet
|
||||||
|
summary: Is this pet still available?
|
||||||
|
description: ''
|
||||||
|
operationId: isPetAvailable
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
parameters:
|
||||||
|
- name: petId
|
||||||
|
in: path
|
||||||
|
description: ID of pet to check
|
||||||
|
required: true
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: successful operation
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/Bit'
|
||||||
|
security:
|
||||||
|
- petstore_auth:
|
||||||
|
- 'write:pets'
|
||||||
|
- 'read:pets'
|
||||||
/store/inventory:
|
/store/inventory:
|
||||||
get:
|
get:
|
||||||
tags:
|
tags:
|
||||||
@ -775,3 +820,9 @@ definitions:
|
|||||||
uniqueItems: true
|
uniqueItems: true
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
|
Bit:
|
||||||
|
description: bit value
|
||||||
|
type: number
|
||||||
|
enum:
|
||||||
|
- 0
|
||||||
|
- 1
|
||||||
|
@ -0,0 +1,58 @@
|
|||||||
|
# Copied from k6
|
||||||
|
openapi: 3.0.0
|
||||||
|
info:
|
||||||
|
title: Sample API
|
||||||
|
description: Optional multiline or single-line description in [CommonMark](http://commonmark.org/help/) or HTML.
|
||||||
|
version: 0.1.9
|
||||||
|
servers:
|
||||||
|
- url: http://api.example.com/v1
|
||||||
|
description: Optional server description, e.g. Main (production) server
|
||||||
|
- url: http://staging-api.example.com
|
||||||
|
description: Optional server description, e.g. Internal staging server for testing
|
||||||
|
security:
|
||||||
|
- bearerAuth: []
|
||||||
|
paths:
|
||||||
|
/users:
|
||||||
|
get:
|
||||||
|
summary: Returns a list of users.
|
||||||
|
description: Optional extended description in CommonMark or HTML.
|
||||||
|
responses:
|
||||||
|
"200": # status code
|
||||||
|
description: A JSON array of user names
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
security:
|
||||||
|
- bearerAuth: []
|
||||||
|
/public:
|
||||||
|
get:
|
||||||
|
summary: Returns public information.
|
||||||
|
description: This endpoint does not require authentication.
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: A JSON object with public information
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
security: []
|
||||||
|
/private:
|
||||||
|
get:
|
||||||
|
summary: Returns private information.
|
||||||
|
description: This endpoint requires global security settings.
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: A JSON object with private information
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
components:
|
||||||
|
securitySchemes:
|
||||||
|
bearerAuth:
|
||||||
|
type: http
|
||||||
|
scheme: bearer
|
||||||
|
bearerFormat: JWT # Optional: specify the format (e.g., JWT) if applicable
|
23
samples/client/others/c/bearerAuth/.openapi-generator-ignore
Normal file
23
samples/client/others/c/bearerAuth/.openapi-generator-ignore
Normal 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
|
22
samples/client/others/c/bearerAuth/.openapi-generator/FILES
Normal file
22
samples/client/others/c/bearerAuth/.openapi-generator/FILES
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
CMakeLists.txt
|
||||||
|
Packing.cmake
|
||||||
|
README.md
|
||||||
|
api/DefaultAPI.c
|
||||||
|
api/DefaultAPI.h
|
||||||
|
docs/DefaultAPI.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/any_type.h
|
||||||
|
model/object.c
|
||||||
|
model/object.h
|
||||||
|
src/apiClient.c
|
||||||
|
src/apiKey.c
|
||||||
|
src/binary.c
|
||||||
|
src/list.c
|
||||||
|
uncrustify-rules.cfg
|
@ -0,0 +1 @@
|
|||||||
|
7.11.0-SNAPSHOT
|
168
samples/client/others/c/bearerAuth/CMakeLists.txt
Normal file
168
samples/client/others/c/bearerAuth/CMakeLists.txt
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
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 "sample_api")
|
||||||
|
|
||||||
|
# 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
|
||||||
|
api/DefaultAPI.c
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
|
set(HDRS
|
||||||
|
include/apiClient.h
|
||||||
|
include/list.h
|
||||||
|
include/binary.h
|
||||||
|
include/keyValuePair.h
|
||||||
|
external/cJSON.h
|
||||||
|
model/object.h
|
||||||
|
model/any_type.h
|
||||||
|
api/DefaultAPI.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-DefaultAPI.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})
|
24
samples/client/others/c/bearerAuth/Packing.cmake
Normal file
24
samples/client/others/c/bearerAuth/Packing.cmake
Normal 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)
|
90
samples/client/others/c/bearerAuth/README.md
Normal file
90
samples/client/others/c/bearerAuth/README.md
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
# C API client for sample_api
|
||||||
|
|
||||||
|
## 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: 0.1.9
|
||||||
|
- Package version:
|
||||||
|
- Generator version: 7.11.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. -lsample_api -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://api.example.com/v1*
|
||||||
|
|
||||||
|
Category | Method | HTTP request | Description
|
||||||
|
------------ | ------------- | ------------- | -------------
|
||||||
|
*DefaultAPI* | [**DefaultAPI_privateGet**](docs/DefaultAPI.md#DefaultAPI_privateGet) | **GET** /private | Returns private information.
|
||||||
|
*DefaultAPI* | [**DefaultAPI_publicGet**](docs/DefaultAPI.md#DefaultAPI_publicGet) | **GET** /public | Returns public information.
|
||||||
|
*DefaultAPI* | [**DefaultAPI_usersGet**](docs/DefaultAPI.md#DefaultAPI_usersGet) | **GET** /users | Returns a list of users.
|
||||||
|
|
||||||
|
|
||||||
|
## Documentation for Models
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Documentation for Authorization
|
||||||
|
|
||||||
|
|
||||||
|
Authentication schemes defined for the API:
|
||||||
|
### bearerAuth
|
||||||
|
|
||||||
|
|
||||||
|
- **Type**: HTTP Bearer Token authentication (JWT)
|
||||||
|
|
||||||
|
|
||||||
|
## Author
|
||||||
|
|
||||||
|
|
||||||
|
|
204
samples/client/others/c/bearerAuth/api/DefaultAPI.c
Normal file
204
samples/client/others/c/bearerAuth/api/DefaultAPI.c
Normal file
@ -0,0 +1,204 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include "DefaultAPI.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)
|
||||||
|
|
||||||
|
|
||||||
|
// Returns private information.
|
||||||
|
//
|
||||||
|
// This endpoint requires global security settings.
|
||||||
|
//
|
||||||
|
object_t*
|
||||||
|
DefaultAPI_privateGet(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("/private")+1;
|
||||||
|
char *localVarPath = malloc(sizeOfPath);
|
||||||
|
snprintf(localVarPath, sizeOfPath, "/private");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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","A JSON object with private information");
|
||||||
|
//}
|
||||||
|
//nonprimitive not container
|
||||||
|
cJSON *DefaultAPIlocalVarJSON = cJSON_Parse(apiClient->dataReceived);
|
||||||
|
object_t *elementToReturn = object_parseFromJSON(DefaultAPIlocalVarJSON);
|
||||||
|
cJSON_Delete(DefaultAPIlocalVarJSON);
|
||||||
|
if(elementToReturn == NULL) {
|
||||||
|
// return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//return type
|
||||||
|
if (apiClient->dataReceived) {
|
||||||
|
free(apiClient->dataReceived);
|
||||||
|
apiClient->dataReceived = NULL;
|
||||||
|
apiClient->dataReceivedLen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
list_freeList(localVarHeaderType);
|
||||||
|
|
||||||
|
free(localVarPath);
|
||||||
|
return elementToReturn;
|
||||||
|
end:
|
||||||
|
free(localVarPath);
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns public information.
|
||||||
|
//
|
||||||
|
// This endpoint does not require authentication.
|
||||||
|
//
|
||||||
|
object_t*
|
||||||
|
DefaultAPI_publicGet(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("/public")+1;
|
||||||
|
char *localVarPath = malloc(sizeOfPath);
|
||||||
|
snprintf(localVarPath, sizeOfPath, "/public");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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","A JSON object with public information");
|
||||||
|
//}
|
||||||
|
//nonprimitive not container
|
||||||
|
cJSON *DefaultAPIlocalVarJSON = cJSON_Parse(apiClient->dataReceived);
|
||||||
|
object_t *elementToReturn = object_parseFromJSON(DefaultAPIlocalVarJSON);
|
||||||
|
cJSON_Delete(DefaultAPIlocalVarJSON);
|
||||||
|
if(elementToReturn == NULL) {
|
||||||
|
// return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//return type
|
||||||
|
if (apiClient->dataReceived) {
|
||||||
|
free(apiClient->dataReceived);
|
||||||
|
apiClient->dataReceived = NULL;
|
||||||
|
apiClient->dataReceivedLen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
list_freeList(localVarHeaderType);
|
||||||
|
|
||||||
|
free(localVarPath);
|
||||||
|
return elementToReturn;
|
||||||
|
end:
|
||||||
|
free(localVarPath);
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns a list of users.
|
||||||
|
//
|
||||||
|
// Optional extended description in CommonMark or HTML.
|
||||||
|
//
|
||||||
|
list_t*
|
||||||
|
DefaultAPI_usersGet(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("/users")+1;
|
||||||
|
char *localVarPath = malloc(sizeOfPath);
|
||||||
|
snprintf(localVarPath, sizeOfPath, "/users");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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","A JSON array of user names");
|
||||||
|
//}
|
||||||
|
//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_Print(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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
34
samples/client/others/c/bearerAuth/api/DefaultAPI.h
Normal file
34
samples/client/others/c/bearerAuth/api/DefaultAPI.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#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/object.h"
|
||||||
|
|
||||||
|
|
||||||
|
// Returns private information.
|
||||||
|
//
|
||||||
|
// This endpoint requires global security settings.
|
||||||
|
//
|
||||||
|
object_t*
|
||||||
|
DefaultAPI_privateGet(apiClient_t *apiClient);
|
||||||
|
|
||||||
|
|
||||||
|
// Returns public information.
|
||||||
|
//
|
||||||
|
// This endpoint does not require authentication.
|
||||||
|
//
|
||||||
|
object_t*
|
||||||
|
DefaultAPI_publicGet(apiClient_t *apiClient);
|
||||||
|
|
||||||
|
|
||||||
|
// Returns a list of users.
|
||||||
|
//
|
||||||
|
// Optional extended description in CommonMark or HTML.
|
||||||
|
//
|
||||||
|
list_t*
|
||||||
|
DefaultAPI_usersGet(apiClient_t *apiClient);
|
||||||
|
|
||||||
|
|
104
samples/client/others/c/bearerAuth/docs/DefaultAPI.md
Normal file
104
samples/client/others/c/bearerAuth/docs/DefaultAPI.md
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
# DefaultAPI
|
||||||
|
|
||||||
|
All URIs are relative to *http://api.example.com/v1*
|
||||||
|
|
||||||
|
Method | HTTP request | Description
|
||||||
|
------------- | ------------- | -------------
|
||||||
|
[**DefaultAPI_privateGet**](DefaultAPI.md#DefaultAPI_privateGet) | **GET** /private | Returns private information.
|
||||||
|
[**DefaultAPI_publicGet**](DefaultAPI.md#DefaultAPI_publicGet) | **GET** /public | Returns public information.
|
||||||
|
[**DefaultAPI_usersGet**](DefaultAPI.md#DefaultAPI_usersGet) | **GET** /users | Returns a list of users.
|
||||||
|
|
||||||
|
|
||||||
|
# **DefaultAPI_privateGet**
|
||||||
|
```c
|
||||||
|
// Returns private information.
|
||||||
|
//
|
||||||
|
// This endpoint requires global security settings.
|
||||||
|
//
|
||||||
|
object_t* DefaultAPI_privateGet(apiClient_t *apiClient);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------- | ------------- | ------------- | -------------
|
||||||
|
**apiClient** | **apiClient_t \*** | context containing the client configuration |
|
||||||
|
|
||||||
|
### Return type
|
||||||
|
|
||||||
|
[object_t](object.md) *
|
||||||
|
|
||||||
|
|
||||||
|
### Authorization
|
||||||
|
|
||||||
|
[bearerAuth](../README.md#bearerAuth)
|
||||||
|
|
||||||
|
### 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)
|
||||||
|
|
||||||
|
# **DefaultAPI_publicGet**
|
||||||
|
```c
|
||||||
|
// Returns public information.
|
||||||
|
//
|
||||||
|
// This endpoint does not require authentication.
|
||||||
|
//
|
||||||
|
object_t* DefaultAPI_publicGet(apiClient_t *apiClient);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------- | ------------- | ------------- | -------------
|
||||||
|
**apiClient** | **apiClient_t \*** | context containing the client configuration |
|
||||||
|
|
||||||
|
### Return type
|
||||||
|
|
||||||
|
[object_t](object.md) *
|
||||||
|
|
||||||
|
|
||||||
|
### Authorization
|
||||||
|
|
||||||
|
No authorization required
|
||||||
|
|
||||||
|
### 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)
|
||||||
|
|
||||||
|
# **DefaultAPI_usersGet**
|
||||||
|
```c
|
||||||
|
// Returns a list of users.
|
||||||
|
//
|
||||||
|
// Optional extended description in CommonMark or HTML.
|
||||||
|
//
|
||||||
|
list_t* DefaultAPI_usersGet(apiClient_t *apiClient);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------- | ------------- | ------------- | -------------
|
||||||
|
**apiClient** | **apiClient_t \*** | context containing the client configuration |
|
||||||
|
|
||||||
|
### Return type
|
||||||
|
|
||||||
|
|
||||||
|
[list_t](char.md) *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Authorization
|
||||||
|
|
||||||
|
[bearerAuth](../README.md#bearerAuth)
|
||||||
|
|
||||||
|
### 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)
|
||||||
|
|
2932
samples/client/others/c/bearerAuth/external/cJSON.c
vendored
Normal file
2932
samples/client/others/c/bearerAuth/external/cJSON.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
277
samples/client/others/c/bearerAuth/external/cJSON.h
vendored
Normal file
277
samples/client/others/c/bearerAuth/external/cJSON.h
vendored
Normal 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
|
19
samples/client/others/c/bearerAuth/external/cJSON.licence
vendored
Normal file
19
samples/client/others/c/bearerAuth/external/cJSON.licence
vendored
Normal 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.
|
62
samples/client/others/c/bearerAuth/include/apiClient.h
Normal file
62
samples/client/others/c/bearerAuth/include/apiClient.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#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;
|
||||||
|
} apiClient_t;
|
||||||
|
|
||||||
|
apiClient_t* apiClient_create();
|
||||||
|
|
||||||
|
apiClient_t* apiClient_create_with_base_path(const char *basePath
|
||||||
|
, sslConfig_t *sslConfig
|
||||||
|
);
|
||||||
|
|
||||||
|
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
|
18
samples/client/others/c/bearerAuth/include/binary.h
Normal file
18
samples/client/others/c/bearerAuth/include/binary.h
Normal 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
|
17
samples/client/others/c/bearerAuth/include/keyValuePair.h
Normal file
17
samples/client/others/c/bearerAuth/include/keyValuePair.h
Normal 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_ */
|
42
samples/client/others/c/bearerAuth/include/list.h
Normal file
42
samples/client/others/c/bearerAuth/include/list.h
Normal 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
|
11
samples/client/others/c/bearerAuth/libcurl.licence
Normal file
11
samples/client/others/c/bearerAuth/libcurl.licence
Normal 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.
|
5
samples/client/others/c/bearerAuth/model/any_type.h
Normal file
5
samples/client/others/c/bearerAuth/model/any_type.h
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
/*
|
||||||
|
* any_type.h
|
||||||
|
*
|
||||||
|
* A placeholder for now, this type isn't really needed.
|
||||||
|
*/
|
51
samples/client/others/c/bearerAuth/model/object.c
Normal file
51
samples/client/others/c/bearerAuth/model/object.c
Normal 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_Print(json);
|
||||||
|
return object;
|
||||||
|
|
||||||
|
end:
|
||||||
|
return NULL;
|
||||||
|
}
|
27
samples/client/others/c/bearerAuth/model/object.h
Normal file
27
samples/client/others/c/bearerAuth/model/object.h
Normal 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_ */
|
509
samples/client/others/c/bearerAuth/src/apiClient.c
Normal file
509
samples/client/others/c/bearerAuth/src/apiClient.c
Normal file
@ -0,0 +1,509 @@
|
|||||||
|
#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://api.example.com/v1");
|
||||||
|
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;
|
||||||
|
|
||||||
|
return apiClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
apiClient_t *apiClient_create_with_base_path(const char *basePath
|
||||||
|
, sslConfig_t *sslConfig
|
||||||
|
) {
|
||||||
|
apiClient_t *apiClient = malloc(sizeof(apiClient_t));
|
||||||
|
if(basePath){
|
||||||
|
apiClient->basePath = strdup(basePath);
|
||||||
|
}else{
|
||||||
|
apiClient->basePath = strdup("http://api.example.com/v1");
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
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 bearer token authentication
|
||||||
|
if(apiClient->accessToken != NULL)
|
||||||
|
{
|
||||||
|
int authHeaderSize;
|
||||||
|
char *authHeader = NULL;
|
||||||
|
|
||||||
|
authHeaderSize = snprintf(NULL, 0, "Authorization: Bearer %s", apiClient->accessToken) + 1;
|
||||||
|
authHeader = malloc(authHeaderSize);
|
||||||
|
snprintf(authHeader, authHeaderSize, "Authorization: Bearer %s", apiClient->accessToken);
|
||||||
|
headers = curl_slist_append(headers, authHeader);
|
||||||
|
free(authHeader);
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
20
samples/client/others/c/bearerAuth/src/apiKey.c
Normal file
20
samples/client/others/c/bearerAuth/src/apiKey.c
Normal 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);
|
||||||
|
}
|
58
samples/client/others/c/bearerAuth/src/binary.c
Normal file
58
samples/client/others/c/bearerAuth/src/binary.c
Normal 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
|
||||||
|
}
|
200
samples/client/others/c/bearerAuth/src/list.c
Normal file
200
samples/client/others/c/bearerAuth/src/list.c
Normal 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);
|
||||||
|
}
|
210
samples/client/others/c/bearerAuth/uncrustify-rules.cfg
Normal file
210
samples/client/others/c/bearerAuth/uncrustify-rules.cfg
Normal 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
|
@ -12,6 +12,7 @@ docs/PetAPI.md
|
|||||||
docs/StoreAPI.md
|
docs/StoreAPI.md
|
||||||
docs/UserAPI.md
|
docs/UserAPI.md
|
||||||
docs/api_response.md
|
docs/api_response.md
|
||||||
|
docs/bit.md
|
||||||
docs/category.md
|
docs/category.md
|
||||||
docs/model_with_set_propertes.md
|
docs/model_with_set_propertes.md
|
||||||
docs/order.md
|
docs/order.md
|
||||||
@ -30,6 +31,8 @@ libcurl.licence
|
|||||||
model/any_type.h
|
model/any_type.h
|
||||||
model/api_response.c
|
model/api_response.c
|
||||||
model/api_response.h
|
model/api_response.h
|
||||||
|
model/bit.c
|
||||||
|
model/bit.h
|
||||||
model/category.c
|
model/category.c
|
||||||
model/category.h
|
model/category.h
|
||||||
model/mapped_model.c
|
model/mapped_model.c
|
||||||
|
@ -56,6 +56,7 @@ set(SRCS
|
|||||||
model/object.c
|
model/object.c
|
||||||
model/mapped_model.c
|
model/mapped_model.c
|
||||||
model/api_response.c
|
model/api_response.c
|
||||||
|
model/bit.c
|
||||||
model/category.c
|
model/category.c
|
||||||
model/model_with_set_propertes.c
|
model/model_with_set_propertes.c
|
||||||
model/order.c
|
model/order.c
|
||||||
@ -79,6 +80,7 @@ set(HDRS
|
|||||||
model/any_type.h
|
model/any_type.h
|
||||||
model/mapped_model.h
|
model/mapped_model.h
|
||||||
model/api_response.h
|
model/api_response.h
|
||||||
|
model/bit.h
|
||||||
model/category.h
|
model/category.h
|
||||||
model/model_with_set_propertes.h
|
model/model_with_set_propertes.h
|
||||||
model/order.h
|
model/order.h
|
||||||
|
@ -70,6 +70,8 @@ Category | Method | HTTP request | Description
|
|||||||
*PetAPI* | [**PetAPI_findPetsByStatus**](docs/PetAPI.md#PetAPI_findPetsByStatus) | **GET** /pet/findByStatus | Finds Pets by status
|
*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_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_getPetById**](docs/PetAPI.md#PetAPI_getPetById) | **GET** /pet/{petId} | Find pet by ID
|
||||||
|
*PetAPI* | [**PetAPI_isPetAvailable**](docs/PetAPI.md#PetAPI_isPetAvailable) | **POST** /pet/{petId}/isAvailable | Is this pet still available?
|
||||||
|
*PetAPI* | [**PetAPI_sharePicture**](docs/PetAPI.md#PetAPI_sharePicture) | **POST** /pet/picture | Send a picture of your happy pet
|
||||||
*PetAPI* | [**PetAPI_specialtyPet**](docs/PetAPI.md#PetAPI_specialtyPet) | **GET** /pet/specialty | Specialty of the shop
|
*PetAPI* | [**PetAPI_specialtyPet**](docs/PetAPI.md#PetAPI_specialtyPet) | **GET** /pet/specialty | Specialty of the shop
|
||||||
*PetAPI* | [**PetAPI_updatePet**](docs/PetAPI.md#PetAPI_updatePet) | **PUT** /pet | Update an existing pet
|
*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_updatePetWithForm**](docs/PetAPI.md#PetAPI_updatePetWithForm) | **POST** /pet/{petId} | Updates a pet in the store with form data
|
||||||
@ -93,6 +95,7 @@ Category | Method | HTTP request | Description
|
|||||||
|
|
||||||
- [MappedModel_t](docs/MappedModel.md)
|
- [MappedModel_t](docs/MappedModel.md)
|
||||||
- [api_response_t](docs/api_response.md)
|
- [api_response_t](docs/api_response.md)
|
||||||
|
- [bit_t](docs/bit.md)
|
||||||
- [category_t](docs/category.md)
|
- [category_t](docs/category.md)
|
||||||
- [model_with_set_propertes_t](docs/model_with_set_propertes.md)
|
- [model_with_set_propertes_t](docs/model_with_set_propertes.md)
|
||||||
- [order_t](docs/order.md)
|
- [order_t](docs/order.md)
|
||||||
|
@ -460,6 +460,141 @@ end:
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Is this pet still available?
|
||||||
|
//
|
||||||
|
openapi_petstore_bit__e
|
||||||
|
PetAPI_isPetAvailable(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}/isAvailable")+1;
|
||||||
|
char *localVarPath = malloc(sizeOfPath);
|
||||||
|
snprintf(localVarPath, sizeOfPath, "/pet/{petId}/isAvailable");
|
||||||
|
|
||||||
|
|
||||||
|
// 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/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");
|
||||||
|
//}
|
||||||
|
//nonprimitive not container
|
||||||
|
cJSON *PetAPIlocalVarJSON = cJSON_Parse(apiClient->dataReceived);
|
||||||
|
openapi_petstore_bit__e elementToReturn = bit_parseFromJSON(PetAPIlocalVarJSON);
|
||||||
|
cJSON_Delete(PetAPIlocalVarJSON);
|
||||||
|
if(elementToReturn == 0) {
|
||||||
|
// 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 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send a picture of your happy pet
|
||||||
|
//
|
||||||
|
char*
|
||||||
|
PetAPI_sharePicture(apiClient_t *apiClient, char *picture)
|
||||||
|
{
|
||||||
|
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/picture")+1;
|
||||||
|
char *localVarPath = malloc(sizeOfPath);
|
||||||
|
snprintf(localVarPath, sizeOfPath, "/pet/picture");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Body Param
|
||||||
|
localVarBodyParameters = strdup(picture);
|
||||||
|
list_addElement(localVarHeaderType,"*/*"); //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");
|
||||||
|
//}
|
||||||
|
//primitive return type simple
|
||||||
|
char* elementToReturn = strdup((char*)apiClient->dataReceived);
|
||||||
|
|
||||||
|
if (apiClient->dataReceived) {
|
||||||
|
free(apiClient->dataReceived);
|
||||||
|
apiClient->dataReceived = NULL;
|
||||||
|
apiClient->dataReceivedLen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
list_freeList(localVarHeaderType);
|
||||||
|
|
||||||
|
free(localVarPath);
|
||||||
|
free(localVarBodyParameters);
|
||||||
|
return elementToReturn;
|
||||||
|
end:
|
||||||
|
free(localVarPath);
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Specialty of the shop
|
// Specialty of the shop
|
||||||
//
|
//
|
||||||
// Returns the kind of pet the store specializes in
|
// Returns the kind of pet the store specializes in
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "../include/keyValuePair.h"
|
#include "../include/keyValuePair.h"
|
||||||
#include "../include/binary.h"
|
#include "../include/binary.h"
|
||||||
#include "../model/api_response.h"
|
#include "../model/api_response.h"
|
||||||
|
#include "../model/bit.h"
|
||||||
#include "../model/pet.h"
|
#include "../model/pet.h"
|
||||||
#include "../model/preference.h"
|
#include "../model/preference.h"
|
||||||
|
|
||||||
@ -49,6 +50,18 @@ pet_t*
|
|||||||
PetAPI_getPetById(apiClient_t *apiClient, long petId);
|
PetAPI_getPetById(apiClient_t *apiClient, long petId);
|
||||||
|
|
||||||
|
|
||||||
|
// Is this pet still available?
|
||||||
|
//
|
||||||
|
openapi_petstore_bit__e
|
||||||
|
PetAPI_isPetAvailable(apiClient_t *apiClient, long petId);
|
||||||
|
|
||||||
|
|
||||||
|
// Send a picture of your happy pet
|
||||||
|
//
|
||||||
|
char*
|
||||||
|
PetAPI_sharePicture(apiClient_t *apiClient, char *picture);
|
||||||
|
|
||||||
|
|
||||||
// Specialty of the shop
|
// Specialty of the shop
|
||||||
//
|
//
|
||||||
// Returns the kind of pet the store specializes in
|
// Returns the kind of pet the store specializes in
|
||||||
|
@ -9,6 +9,8 @@ Method | HTTP request | Description
|
|||||||
[**PetAPI_findPetsByStatus**](PetAPI.md#PetAPI_findPetsByStatus) | **GET** /pet/findByStatus | Finds Pets by status
|
[**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_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_getPetById**](PetAPI.md#PetAPI_getPetById) | **GET** /pet/{petId} | Find pet by ID
|
||||||
|
[**PetAPI_isPetAvailable**](PetAPI.md#PetAPI_isPetAvailable) | **POST** /pet/{petId}/isAvailable | Is this pet still available?
|
||||||
|
[**PetAPI_sharePicture**](PetAPI.md#PetAPI_sharePicture) | **POST** /pet/picture | Send a picture of your happy pet
|
||||||
[**PetAPI_specialtyPet**](PetAPI.md#PetAPI_specialtyPet) | **GET** /pet/specialty | Specialty of the shop
|
[**PetAPI_specialtyPet**](PetAPI.md#PetAPI_specialtyPet) | **GET** /pet/specialty | Specialty of the shop
|
||||||
[**PetAPI_updatePet**](PetAPI.md#PetAPI_updatePet) | **PUT** /pet | Update an existing pet
|
[**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_updatePetWithForm**](PetAPI.md#PetAPI_updatePetWithForm) | **POST** /pet/{petId} | Updates a pet in the store with form data
|
||||||
@ -165,6 +167,65 @@ Name | Type | Description | Notes
|
|||||||
|
|
||||||
[[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)
|
[[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_isPetAvailable**
|
||||||
|
```c
|
||||||
|
// Is this pet still available?
|
||||||
|
//
|
||||||
|
bit_t* PetAPI_isPetAvailable(apiClient_t *apiClient, long petId);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------- | ------------- | ------------- | -------------
|
||||||
|
**apiClient** | **apiClient_t \*** | context containing the client configuration |
|
||||||
|
**petId** | **long** | ID of pet to check |
|
||||||
|
|
||||||
|
### Return type
|
||||||
|
|
||||||
|
[bit_t](bit.md) *
|
||||||
|
|
||||||
|
|
||||||
|
### Authorization
|
||||||
|
|
||||||
|
[petstore_auth](../README.md#petstore_auth)
|
||||||
|
|
||||||
|
### 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)
|
||||||
|
|
||||||
|
# **PetAPI_sharePicture**
|
||||||
|
```c
|
||||||
|
// Send a picture of your happy pet
|
||||||
|
//
|
||||||
|
char* PetAPI_sharePicture(apiClient_t *apiClient, char *picture);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------- | ------------- | ------------- | -------------
|
||||||
|
**apiClient** | **apiClient_t \*** | context containing the client configuration |
|
||||||
|
**picture** | **char \*** | A picture you want to share |
|
||||||
|
|
||||||
|
### Return type
|
||||||
|
|
||||||
|
char*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Authorization
|
||||||
|
|
||||||
|
No authorization required
|
||||||
|
|
||||||
|
### HTTP request headers
|
||||||
|
|
||||||
|
- **Content-Type**: Not defined
|
||||||
|
- **Accept**: */*
|
||||||
|
|
||||||
|
[[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_specialtyPet**
|
# **PetAPI_specialtyPet**
|
||||||
```c
|
```c
|
||||||
// Specialty of the shop
|
// Specialty of the shop
|
||||||
|
9
samples/client/petstore/c-useJsonUnformatted/docs/bit.md
Normal file
9
samples/client/petstore/c-useJsonUnformatted/docs/bit.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# bit_t
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------ | ------------- | ------------- | -------------
|
||||||
|
|
||||||
|
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||||
|
|
||||||
|
|
@ -78,6 +78,9 @@ api_response_t *api_response_parseFromJSON(cJSON *api_responseJSON){
|
|||||||
|
|
||||||
// api_response->code
|
// api_response->code
|
||||||
cJSON *code = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "code");
|
cJSON *code = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "code");
|
||||||
|
if (cJSON_IsNull(code)) {
|
||||||
|
code = NULL;
|
||||||
|
}
|
||||||
if (code) {
|
if (code) {
|
||||||
if(!cJSON_IsNumber(code))
|
if(!cJSON_IsNumber(code))
|
||||||
{
|
{
|
||||||
@ -87,6 +90,9 @@ api_response_t *api_response_parseFromJSON(cJSON *api_responseJSON){
|
|||||||
|
|
||||||
// api_response->type
|
// api_response->type
|
||||||
cJSON *type = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "type");
|
cJSON *type = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "type");
|
||||||
|
if (cJSON_IsNull(type)) {
|
||||||
|
type = NULL;
|
||||||
|
}
|
||||||
if (type) {
|
if (type) {
|
||||||
if(!cJSON_IsString(type) && !cJSON_IsNull(type))
|
if(!cJSON_IsString(type) && !cJSON_IsNull(type))
|
||||||
{
|
{
|
||||||
@ -96,6 +102,9 @@ api_response_t *api_response_parseFromJSON(cJSON *api_responseJSON){
|
|||||||
|
|
||||||
// api_response->message
|
// api_response->message
|
||||||
cJSON *message = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "message");
|
cJSON *message = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "message");
|
||||||
|
if (cJSON_IsNull(message)) {
|
||||||
|
message = NULL;
|
||||||
|
}
|
||||||
if (message) {
|
if (message) {
|
||||||
if(!cJSON_IsString(message) && !cJSON_IsNull(message))
|
if(!cJSON_IsString(message) && !cJSON_IsNull(message))
|
||||||
{
|
{
|
||||||
|
41
samples/client/petstore/c-useJsonUnformatted/model/bit.c
Normal file
41
samples/client/petstore/c-useJsonUnformatted/model/bit.c
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "bit.h"
|
||||||
|
|
||||||
|
|
||||||
|
char* bit_bit_ToString(openapi_petstore_bit__e bit) {
|
||||||
|
char *bitArray[] = { "NULL", "0", "1" };
|
||||||
|
return bitArray[bit];
|
||||||
|
}
|
||||||
|
|
||||||
|
openapi_petstore_bit__e bit_bit_FromString(char* bit) {
|
||||||
|
int stringToReturn = 0;
|
||||||
|
char *bitArray[] = { "NULL", "0", "1" };
|
||||||
|
size_t sizeofArray = sizeof(bitArray) / sizeof(bitArray[0]);
|
||||||
|
while(stringToReturn < sizeofArray) {
|
||||||
|
if(strcmp(bit, bitArray[stringToReturn]) == 0) {
|
||||||
|
return stringToReturn;
|
||||||
|
}
|
||||||
|
stringToReturn++;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON *bit_convertToJSON(openapi_petstore_bit__e bit) {
|
||||||
|
cJSON *item = cJSON_CreateObject();
|
||||||
|
if(cJSON_AddNumberToObject(item, "bit", bit) == NULL) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
fail:
|
||||||
|
cJSON_Delete(item);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
openapi_petstore_bit__e bit_parseFromJSON(cJSON *bitJSON) {
|
||||||
|
if(!cJSON_IsNumber(bitJSON)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return bitJSON->valueint;
|
||||||
|
}
|
32
samples/client/petstore/c-useJsonUnformatted/model/bit.h
Normal file
32
samples/client/petstore/c-useJsonUnformatted/model/bit.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* bit.h
|
||||||
|
*
|
||||||
|
* bit value
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _bit_H_
|
||||||
|
#define _bit_H_
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include "../external/cJSON.h"
|
||||||
|
#include "../include/list.h"
|
||||||
|
#include "../include/keyValuePair.h"
|
||||||
|
#include "../include/binary.h"
|
||||||
|
|
||||||
|
typedef struct bit_t bit_t;
|
||||||
|
|
||||||
|
|
||||||
|
// Enum for bit
|
||||||
|
|
||||||
|
typedef enum { openapi_petstore_bit__NULL = 0, openapi_petstore_bit___0, openapi_petstore_bit___1 } openapi_petstore_bit__e;
|
||||||
|
|
||||||
|
char* bit_bit_ToString(openapi_petstore_bit__e bit);
|
||||||
|
|
||||||
|
openapi_petstore_bit__e bit_bit_FromString(char* bit);
|
||||||
|
|
||||||
|
cJSON *bit_convertToJSON(openapi_petstore_bit__e bit);
|
||||||
|
|
||||||
|
openapi_petstore_bit__e bit_parseFromJSON(cJSON *bitJSON);
|
||||||
|
|
||||||
|
#endif /* _bit_H_ */
|
||||||
|
|
@ -64,6 +64,9 @@ category_t *category_parseFromJSON(cJSON *categoryJSON){
|
|||||||
|
|
||||||
// category->id
|
// category->id
|
||||||
cJSON *id = cJSON_GetObjectItemCaseSensitive(categoryJSON, "id");
|
cJSON *id = cJSON_GetObjectItemCaseSensitive(categoryJSON, "id");
|
||||||
|
if (cJSON_IsNull(id)) {
|
||||||
|
id = NULL;
|
||||||
|
}
|
||||||
if (id) {
|
if (id) {
|
||||||
if(!cJSON_IsNumber(id))
|
if(!cJSON_IsNumber(id))
|
||||||
{
|
{
|
||||||
@ -73,6 +76,9 @@ category_t *category_parseFromJSON(cJSON *categoryJSON){
|
|||||||
|
|
||||||
// category->name
|
// category->name
|
||||||
cJSON *name = cJSON_GetObjectItemCaseSensitive(categoryJSON, "name");
|
cJSON *name = cJSON_GetObjectItemCaseSensitive(categoryJSON, "name");
|
||||||
|
if (cJSON_IsNull(name)) {
|
||||||
|
name = NULL;
|
||||||
|
}
|
||||||
if (name) {
|
if (name) {
|
||||||
if(!cJSON_IsString(name) && !cJSON_IsNull(name))
|
if(!cJSON_IsString(name) && !cJSON_IsNull(name))
|
||||||
{
|
{
|
||||||
|
@ -64,6 +64,9 @@ MappedModel_t *MappedModel_parseFromJSON(cJSON *MappedModelJSON){
|
|||||||
|
|
||||||
// MappedModel->another_property
|
// MappedModel->another_property
|
||||||
cJSON *another_property = cJSON_GetObjectItemCaseSensitive(MappedModelJSON, "another_property");
|
cJSON *another_property = cJSON_GetObjectItemCaseSensitive(MappedModelJSON, "another_property");
|
||||||
|
if (cJSON_IsNull(another_property)) {
|
||||||
|
another_property = NULL;
|
||||||
|
}
|
||||||
if (another_property) {
|
if (another_property) {
|
||||||
if(!cJSON_IsNumber(another_property))
|
if(!cJSON_IsNumber(another_property))
|
||||||
{
|
{
|
||||||
@ -73,6 +76,9 @@ MappedModel_t *MappedModel_parseFromJSON(cJSON *MappedModelJSON){
|
|||||||
|
|
||||||
// MappedModel->uuid_property
|
// MappedModel->uuid_property
|
||||||
cJSON *uuid_property = cJSON_GetObjectItemCaseSensitive(MappedModelJSON, "uuid_property");
|
cJSON *uuid_property = cJSON_GetObjectItemCaseSensitive(MappedModelJSON, "uuid_property");
|
||||||
|
if (cJSON_IsNull(uuid_property)) {
|
||||||
|
uuid_property = NULL;
|
||||||
|
}
|
||||||
if (uuid_property) {
|
if (uuid_property) {
|
||||||
if(!cJSON_IsString(uuid_property) && !cJSON_IsNull(uuid_property))
|
if(!cJSON_IsString(uuid_property) && !cJSON_IsNull(uuid_property))
|
||||||
{
|
{
|
||||||
|
@ -101,6 +101,9 @@ model_with_set_propertes_t *model_with_set_propertes_parseFromJSON(cJSON *model_
|
|||||||
|
|
||||||
// model_with_set_propertes->tag_set
|
// model_with_set_propertes->tag_set
|
||||||
cJSON *tag_set = cJSON_GetObjectItemCaseSensitive(model_with_set_propertesJSON, "tag_set");
|
cJSON *tag_set = cJSON_GetObjectItemCaseSensitive(model_with_set_propertesJSON, "tag_set");
|
||||||
|
if (cJSON_IsNull(tag_set)) {
|
||||||
|
tag_set = NULL;
|
||||||
|
}
|
||||||
if (tag_set) {
|
if (tag_set) {
|
||||||
cJSON *tag_set_local_nonprimitive = NULL;
|
cJSON *tag_set_local_nonprimitive = NULL;
|
||||||
if(!cJSON_IsArray(tag_set)){
|
if(!cJSON_IsArray(tag_set)){
|
||||||
@ -122,6 +125,9 @@ model_with_set_propertes_t *model_with_set_propertes_parseFromJSON(cJSON *model_
|
|||||||
|
|
||||||
// model_with_set_propertes->string_set
|
// model_with_set_propertes->string_set
|
||||||
cJSON *string_set = cJSON_GetObjectItemCaseSensitive(model_with_set_propertesJSON, "string_set");
|
cJSON *string_set = cJSON_GetObjectItemCaseSensitive(model_with_set_propertesJSON, "string_set");
|
||||||
|
if (cJSON_IsNull(string_set)) {
|
||||||
|
string_set = NULL;
|
||||||
|
}
|
||||||
if (string_set) {
|
if (string_set) {
|
||||||
cJSON *string_set_local = NULL;
|
cJSON *string_set_local = NULL;
|
||||||
if(!cJSON_IsArray(string_set)) {
|
if(!cJSON_IsArray(string_set)) {
|
||||||
|
@ -122,6 +122,9 @@ order_t *order_parseFromJSON(cJSON *orderJSON){
|
|||||||
|
|
||||||
// order->id
|
// order->id
|
||||||
cJSON *id = cJSON_GetObjectItemCaseSensitive(orderJSON, "id");
|
cJSON *id = cJSON_GetObjectItemCaseSensitive(orderJSON, "id");
|
||||||
|
if (cJSON_IsNull(id)) {
|
||||||
|
id = NULL;
|
||||||
|
}
|
||||||
if (id) {
|
if (id) {
|
||||||
if(!cJSON_IsNumber(id))
|
if(!cJSON_IsNumber(id))
|
||||||
{
|
{
|
||||||
@ -131,6 +134,9 @@ order_t *order_parseFromJSON(cJSON *orderJSON){
|
|||||||
|
|
||||||
// order->pet_id
|
// order->pet_id
|
||||||
cJSON *pet_id = cJSON_GetObjectItemCaseSensitive(orderJSON, "petId");
|
cJSON *pet_id = cJSON_GetObjectItemCaseSensitive(orderJSON, "petId");
|
||||||
|
if (cJSON_IsNull(pet_id)) {
|
||||||
|
pet_id = NULL;
|
||||||
|
}
|
||||||
if (pet_id) {
|
if (pet_id) {
|
||||||
if(!cJSON_IsNumber(pet_id))
|
if(!cJSON_IsNumber(pet_id))
|
||||||
{
|
{
|
||||||
@ -140,6 +146,9 @@ order_t *order_parseFromJSON(cJSON *orderJSON){
|
|||||||
|
|
||||||
// order->quantity
|
// order->quantity
|
||||||
cJSON *quantity = cJSON_GetObjectItemCaseSensitive(orderJSON, "quantity");
|
cJSON *quantity = cJSON_GetObjectItemCaseSensitive(orderJSON, "quantity");
|
||||||
|
if (cJSON_IsNull(quantity)) {
|
||||||
|
quantity = NULL;
|
||||||
|
}
|
||||||
if (quantity) {
|
if (quantity) {
|
||||||
if(!cJSON_IsNumber(quantity))
|
if(!cJSON_IsNumber(quantity))
|
||||||
{
|
{
|
||||||
@ -149,6 +158,9 @@ order_t *order_parseFromJSON(cJSON *orderJSON){
|
|||||||
|
|
||||||
// order->ship_date
|
// order->ship_date
|
||||||
cJSON *ship_date = cJSON_GetObjectItemCaseSensitive(orderJSON, "shipDate");
|
cJSON *ship_date = cJSON_GetObjectItemCaseSensitive(orderJSON, "shipDate");
|
||||||
|
if (cJSON_IsNull(ship_date)) {
|
||||||
|
ship_date = NULL;
|
||||||
|
}
|
||||||
if (ship_date) {
|
if (ship_date) {
|
||||||
if(!cJSON_IsString(ship_date) && !cJSON_IsNull(ship_date))
|
if(!cJSON_IsString(ship_date) && !cJSON_IsNull(ship_date))
|
||||||
{
|
{
|
||||||
@ -158,6 +170,9 @@ order_t *order_parseFromJSON(cJSON *orderJSON){
|
|||||||
|
|
||||||
// order->status
|
// order->status
|
||||||
cJSON *status = cJSON_GetObjectItemCaseSensitive(orderJSON, "status");
|
cJSON *status = cJSON_GetObjectItemCaseSensitive(orderJSON, "status");
|
||||||
|
if (cJSON_IsNull(status)) {
|
||||||
|
status = NULL;
|
||||||
|
}
|
||||||
openapi_petstore_order_STATUS_e statusVariable;
|
openapi_petstore_order_STATUS_e statusVariable;
|
||||||
if (status) {
|
if (status) {
|
||||||
if(!cJSON_IsString(status))
|
if(!cJSON_IsString(status))
|
||||||
@ -169,6 +184,9 @@ order_t *order_parseFromJSON(cJSON *orderJSON){
|
|||||||
|
|
||||||
// order->complete
|
// order->complete
|
||||||
cJSON *complete = cJSON_GetObjectItemCaseSensitive(orderJSON, "complete");
|
cJSON *complete = cJSON_GetObjectItemCaseSensitive(orderJSON, "complete");
|
||||||
|
if (cJSON_IsNull(complete)) {
|
||||||
|
complete = NULL;
|
||||||
|
}
|
||||||
if (complete) {
|
if (complete) {
|
||||||
if(!cJSON_IsBool(complete))
|
if(!cJSON_IsBool(complete))
|
||||||
{
|
{
|
||||||
|
@ -177,6 +177,9 @@ pet_t *pet_parseFromJSON(cJSON *petJSON){
|
|||||||
|
|
||||||
// pet->id
|
// pet->id
|
||||||
cJSON *id = cJSON_GetObjectItemCaseSensitive(petJSON, "id");
|
cJSON *id = cJSON_GetObjectItemCaseSensitive(petJSON, "id");
|
||||||
|
if (cJSON_IsNull(id)) {
|
||||||
|
id = NULL;
|
||||||
|
}
|
||||||
if (id) {
|
if (id) {
|
||||||
if(!cJSON_IsNumber(id))
|
if(!cJSON_IsNumber(id))
|
||||||
{
|
{
|
||||||
@ -186,12 +189,18 @@ pet_t *pet_parseFromJSON(cJSON *petJSON){
|
|||||||
|
|
||||||
// pet->category
|
// pet->category
|
||||||
cJSON *category = cJSON_GetObjectItemCaseSensitive(petJSON, "category");
|
cJSON *category = cJSON_GetObjectItemCaseSensitive(petJSON, "category");
|
||||||
|
if (cJSON_IsNull(category)) {
|
||||||
|
category = NULL;
|
||||||
|
}
|
||||||
if (category) {
|
if (category) {
|
||||||
category_local_nonprim = category_parseFromJSON(category); //nonprimitive
|
category_local_nonprim = category_parseFromJSON(category); //nonprimitive
|
||||||
}
|
}
|
||||||
|
|
||||||
// pet->name
|
// pet->name
|
||||||
cJSON *name = cJSON_GetObjectItemCaseSensitive(petJSON, "name");
|
cJSON *name = cJSON_GetObjectItemCaseSensitive(petJSON, "name");
|
||||||
|
if (cJSON_IsNull(name)) {
|
||||||
|
name = NULL;
|
||||||
|
}
|
||||||
if (!name) {
|
if (!name) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
@ -204,6 +213,9 @@ pet_t *pet_parseFromJSON(cJSON *petJSON){
|
|||||||
|
|
||||||
// pet->photo_urls
|
// pet->photo_urls
|
||||||
cJSON *photo_urls = cJSON_GetObjectItemCaseSensitive(petJSON, "photoUrls");
|
cJSON *photo_urls = cJSON_GetObjectItemCaseSensitive(petJSON, "photoUrls");
|
||||||
|
if (cJSON_IsNull(photo_urls)) {
|
||||||
|
photo_urls = NULL;
|
||||||
|
}
|
||||||
if (!photo_urls) {
|
if (!photo_urls) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
@ -226,6 +238,9 @@ pet_t *pet_parseFromJSON(cJSON *petJSON){
|
|||||||
|
|
||||||
// pet->tags
|
// pet->tags
|
||||||
cJSON *tags = cJSON_GetObjectItemCaseSensitive(petJSON, "tags");
|
cJSON *tags = cJSON_GetObjectItemCaseSensitive(petJSON, "tags");
|
||||||
|
if (cJSON_IsNull(tags)) {
|
||||||
|
tags = NULL;
|
||||||
|
}
|
||||||
if (tags) {
|
if (tags) {
|
||||||
cJSON *tags_local_nonprimitive = NULL;
|
cJSON *tags_local_nonprimitive = NULL;
|
||||||
if(!cJSON_IsArray(tags)){
|
if(!cJSON_IsArray(tags)){
|
||||||
@ -247,6 +262,9 @@ pet_t *pet_parseFromJSON(cJSON *petJSON){
|
|||||||
|
|
||||||
// pet->status
|
// pet->status
|
||||||
cJSON *status = cJSON_GetObjectItemCaseSensitive(petJSON, "status");
|
cJSON *status = cJSON_GetObjectItemCaseSensitive(petJSON, "status");
|
||||||
|
if (cJSON_IsNull(status)) {
|
||||||
|
status = NULL;
|
||||||
|
}
|
||||||
openapi_petstore_pet_STATUS_e statusVariable;
|
openapi_petstore_pet_STATUS_e statusVariable;
|
||||||
if (status) {
|
if (status) {
|
||||||
if(!cJSON_IsString(status))
|
if(!cJSON_IsString(status))
|
||||||
|
@ -34,14 +34,8 @@ fail:
|
|||||||
}
|
}
|
||||||
|
|
||||||
openapi_petstore_preference__e preference_parseFromJSON(cJSON *preferenceJSON) {
|
openapi_petstore_preference__e preference_parseFromJSON(cJSON *preferenceJSON) {
|
||||||
openapi_petstore_preference__e *preference = NULL;
|
if(!cJSON_IsString(preferenceJSON) || (preferenceJSON->valuestring == NULL)) {
|
||||||
openapi_petstore_preference__e preferenceVariable;
|
return 0;
|
||||||
cJSON *preferenceVar = cJSON_GetObjectItemCaseSensitive(preferenceJSON, "preference");
|
|
||||||
if(!cJSON_IsString(preferenceVar) || (preferenceVar->valuestring == NULL)){
|
|
||||||
goto end;
|
|
||||||
}
|
}
|
||||||
preferenceVariable = preference_preference_FromString(preferenceVar->valuestring);
|
return preference_preference_FromString(preferenceJSON->valuestring);
|
||||||
return preferenceVariable;
|
|
||||||
end:
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,9 @@ tag_t *tag_parseFromJSON(cJSON *tagJSON){
|
|||||||
|
|
||||||
// tag->id
|
// tag->id
|
||||||
cJSON *id = cJSON_GetObjectItemCaseSensitive(tagJSON, "id");
|
cJSON *id = cJSON_GetObjectItemCaseSensitive(tagJSON, "id");
|
||||||
|
if (cJSON_IsNull(id)) {
|
||||||
|
id = NULL;
|
||||||
|
}
|
||||||
if (id) {
|
if (id) {
|
||||||
if(!cJSON_IsNumber(id))
|
if(!cJSON_IsNumber(id))
|
||||||
{
|
{
|
||||||
@ -73,6 +76,9 @@ tag_t *tag_parseFromJSON(cJSON *tagJSON){
|
|||||||
|
|
||||||
// tag->name
|
// tag->name
|
||||||
cJSON *name = cJSON_GetObjectItemCaseSensitive(tagJSON, "name");
|
cJSON *name = cJSON_GetObjectItemCaseSensitive(tagJSON, "name");
|
||||||
|
if (cJSON_IsNull(name)) {
|
||||||
|
name = NULL;
|
||||||
|
}
|
||||||
if (name) {
|
if (name) {
|
||||||
if(!cJSON_IsString(name) && !cJSON_IsNull(name))
|
if(!cJSON_IsString(name) && !cJSON_IsNull(name))
|
||||||
{
|
{
|
||||||
|
@ -193,6 +193,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->id
|
// user->id
|
||||||
cJSON *id = cJSON_GetObjectItemCaseSensitive(userJSON, "id");
|
cJSON *id = cJSON_GetObjectItemCaseSensitive(userJSON, "id");
|
||||||
|
if (cJSON_IsNull(id)) {
|
||||||
|
id = NULL;
|
||||||
|
}
|
||||||
if (id) {
|
if (id) {
|
||||||
if(!cJSON_IsNumber(id))
|
if(!cJSON_IsNumber(id))
|
||||||
{
|
{
|
||||||
@ -202,6 +205,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->username
|
// user->username
|
||||||
cJSON *username = cJSON_GetObjectItemCaseSensitive(userJSON, "username");
|
cJSON *username = cJSON_GetObjectItemCaseSensitive(userJSON, "username");
|
||||||
|
if (cJSON_IsNull(username)) {
|
||||||
|
username = NULL;
|
||||||
|
}
|
||||||
if (username) {
|
if (username) {
|
||||||
if(!cJSON_IsString(username) && !cJSON_IsNull(username))
|
if(!cJSON_IsString(username) && !cJSON_IsNull(username))
|
||||||
{
|
{
|
||||||
@ -211,6 +217,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->first_name
|
// user->first_name
|
||||||
cJSON *first_name = cJSON_GetObjectItemCaseSensitive(userJSON, "firstName");
|
cJSON *first_name = cJSON_GetObjectItemCaseSensitive(userJSON, "firstName");
|
||||||
|
if (cJSON_IsNull(first_name)) {
|
||||||
|
first_name = NULL;
|
||||||
|
}
|
||||||
if (first_name) {
|
if (first_name) {
|
||||||
if(!cJSON_IsString(first_name) && !cJSON_IsNull(first_name))
|
if(!cJSON_IsString(first_name) && !cJSON_IsNull(first_name))
|
||||||
{
|
{
|
||||||
@ -220,6 +229,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->last_name
|
// user->last_name
|
||||||
cJSON *last_name = cJSON_GetObjectItemCaseSensitive(userJSON, "lastName");
|
cJSON *last_name = cJSON_GetObjectItemCaseSensitive(userJSON, "lastName");
|
||||||
|
if (cJSON_IsNull(last_name)) {
|
||||||
|
last_name = NULL;
|
||||||
|
}
|
||||||
if (last_name) {
|
if (last_name) {
|
||||||
if(!cJSON_IsString(last_name) && !cJSON_IsNull(last_name))
|
if(!cJSON_IsString(last_name) && !cJSON_IsNull(last_name))
|
||||||
{
|
{
|
||||||
@ -229,6 +241,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->email
|
// user->email
|
||||||
cJSON *email = cJSON_GetObjectItemCaseSensitive(userJSON, "email");
|
cJSON *email = cJSON_GetObjectItemCaseSensitive(userJSON, "email");
|
||||||
|
if (cJSON_IsNull(email)) {
|
||||||
|
email = NULL;
|
||||||
|
}
|
||||||
if (email) {
|
if (email) {
|
||||||
if(!cJSON_IsString(email) && !cJSON_IsNull(email))
|
if(!cJSON_IsString(email) && !cJSON_IsNull(email))
|
||||||
{
|
{
|
||||||
@ -238,6 +253,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->password
|
// user->password
|
||||||
cJSON *password = cJSON_GetObjectItemCaseSensitive(userJSON, "password");
|
cJSON *password = cJSON_GetObjectItemCaseSensitive(userJSON, "password");
|
||||||
|
if (cJSON_IsNull(password)) {
|
||||||
|
password = NULL;
|
||||||
|
}
|
||||||
if (password) {
|
if (password) {
|
||||||
if(!cJSON_IsString(password) && !cJSON_IsNull(password))
|
if(!cJSON_IsString(password) && !cJSON_IsNull(password))
|
||||||
{
|
{
|
||||||
@ -247,6 +265,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->phone
|
// user->phone
|
||||||
cJSON *phone = cJSON_GetObjectItemCaseSensitive(userJSON, "phone");
|
cJSON *phone = cJSON_GetObjectItemCaseSensitive(userJSON, "phone");
|
||||||
|
if (cJSON_IsNull(phone)) {
|
||||||
|
phone = NULL;
|
||||||
|
}
|
||||||
if (phone) {
|
if (phone) {
|
||||||
if(!cJSON_IsString(phone) && !cJSON_IsNull(phone))
|
if(!cJSON_IsString(phone) && !cJSON_IsNull(phone))
|
||||||
{
|
{
|
||||||
@ -256,6 +277,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->user_status
|
// user->user_status
|
||||||
cJSON *user_status = cJSON_GetObjectItemCaseSensitive(userJSON, "userStatus");
|
cJSON *user_status = cJSON_GetObjectItemCaseSensitive(userJSON, "userStatus");
|
||||||
|
if (cJSON_IsNull(user_status)) {
|
||||||
|
user_status = NULL;
|
||||||
|
}
|
||||||
if (user_status) {
|
if (user_status) {
|
||||||
if(!cJSON_IsNumber(user_status))
|
if(!cJSON_IsNumber(user_status))
|
||||||
{
|
{
|
||||||
@ -265,6 +289,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->extra
|
// user->extra
|
||||||
cJSON *extra = cJSON_GetObjectItemCaseSensitive(userJSON, "extra");
|
cJSON *extra = cJSON_GetObjectItemCaseSensitive(userJSON, "extra");
|
||||||
|
if (cJSON_IsNull(extra)) {
|
||||||
|
extra = NULL;
|
||||||
|
}
|
||||||
if (extra) {
|
if (extra) {
|
||||||
cJSON *extra_local_map = NULL;
|
cJSON *extra_local_map = NULL;
|
||||||
if(!cJSON_IsObject(extra) && !cJSON_IsNull(extra))
|
if(!cJSON_IsObject(extra) && !cJSON_IsNull(extra))
|
||||||
@ -285,6 +312,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->preference
|
// user->preference
|
||||||
cJSON *preference = cJSON_GetObjectItemCaseSensitive(userJSON, "preference");
|
cJSON *preference = cJSON_GetObjectItemCaseSensitive(userJSON, "preference");
|
||||||
|
if (cJSON_IsNull(preference)) {
|
||||||
|
preference = NULL;
|
||||||
|
}
|
||||||
if (preference) {
|
if (preference) {
|
||||||
preference_local_nonprim = preference_parseFromJSON(preference); //custom
|
preference_local_nonprim = preference_parseFromJSON(preference); //custom
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,56 @@
|
|||||||
|
#ifndef bit_TEST
|
||||||
|
#define bit_TEST
|
||||||
|
|
||||||
|
// the following is to include only the main from the first c file
|
||||||
|
#ifndef TEST_MAIN
|
||||||
|
#define TEST_MAIN
|
||||||
|
#define bit_MAIN
|
||||||
|
#endif // TEST_MAIN
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "../external/cJSON.h"
|
||||||
|
|
||||||
|
#include "../model/bit.h"
|
||||||
|
bit_t* instantiate_bit(int include_optional);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bit_t* instantiate_bit(int include_optional) {
|
||||||
|
bit_t* bit = NULL;
|
||||||
|
if (include_optional) {
|
||||||
|
bit = bit_create(
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
bit = bit_create(
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return bit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef bit_MAIN
|
||||||
|
|
||||||
|
void test_bit(int include_optional) {
|
||||||
|
bit_t* bit_1 = instantiate_bit(include_optional);
|
||||||
|
|
||||||
|
cJSON* jsonbit_1 = bit_convertToJSON(bit_1);
|
||||||
|
printf("bit :\n%s\n", cJSON_PrintUnformatted(jsonbit_1));
|
||||||
|
bit_t* bit_2 = bit_parseFromJSON(jsonbit_1);
|
||||||
|
cJSON* jsonbit_2 = bit_convertToJSON(bit_2);
|
||||||
|
printf("repeating bit:\n%s\n", cJSON_PrintUnformatted(jsonbit_2));
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
test_bit(1);
|
||||||
|
test_bit(0);
|
||||||
|
|
||||||
|
printf("Hello world \n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // bit_MAIN
|
||||||
|
#endif // bit_TEST
|
@ -11,6 +11,7 @@ docs/PetAPI.md
|
|||||||
docs/StoreAPI.md
|
docs/StoreAPI.md
|
||||||
docs/UserAPI.md
|
docs/UserAPI.md
|
||||||
docs/api_response.md
|
docs/api_response.md
|
||||||
|
docs/bit.md
|
||||||
docs/category.md
|
docs/category.md
|
||||||
docs/model_with_set_propertes.md
|
docs/model_with_set_propertes.md
|
||||||
docs/order.md
|
docs/order.md
|
||||||
@ -29,6 +30,8 @@ libcurl.licence
|
|||||||
model/any_type.h
|
model/any_type.h
|
||||||
model/api_response.c
|
model/api_response.c
|
||||||
model/api_response.h
|
model/api_response.h
|
||||||
|
model/bit.c
|
||||||
|
model/bit.h
|
||||||
model/category.c
|
model/category.c
|
||||||
model/category.h
|
model/category.h
|
||||||
model/mapped_model.c
|
model/mapped_model.c
|
||||||
|
@ -70,6 +70,8 @@ Category | Method | HTTP request | Description
|
|||||||
*PetAPI* | [**PetAPI_findPetsByStatus**](docs/PetAPI.md#PetAPI_findPetsByStatus) | **GET** /pet/findByStatus | Finds Pets by status
|
*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_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_getPetById**](docs/PetAPI.md#PetAPI_getPetById) | **GET** /pet/{petId} | Find pet by ID
|
||||||
|
*PetAPI* | [**PetAPI_isPetAvailable**](docs/PetAPI.md#PetAPI_isPetAvailable) | **POST** /pet/{petId}/isAvailable | Is this pet still available?
|
||||||
|
*PetAPI* | [**PetAPI_sharePicture**](docs/PetAPI.md#PetAPI_sharePicture) | **POST** /pet/picture | Send a picture of your happy pet
|
||||||
*PetAPI* | [**PetAPI_specialtyPet**](docs/PetAPI.md#PetAPI_specialtyPet) | **GET** /pet/specialty | Specialty of the shop
|
*PetAPI* | [**PetAPI_specialtyPet**](docs/PetAPI.md#PetAPI_specialtyPet) | **GET** /pet/specialty | Specialty of the shop
|
||||||
*PetAPI* | [**PetAPI_updatePet**](docs/PetAPI.md#PetAPI_updatePet) | **PUT** /pet | Update an existing pet
|
*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_updatePetWithForm**](docs/PetAPI.md#PetAPI_updatePetWithForm) | **POST** /pet/{petId} | Updates a pet in the store with form data
|
||||||
@ -93,6 +95,7 @@ Category | Method | HTTP request | Description
|
|||||||
|
|
||||||
- [MappedModel_t](docs/MappedModel.md)
|
- [MappedModel_t](docs/MappedModel.md)
|
||||||
- [api_response_t](docs/api_response.md)
|
- [api_response_t](docs/api_response.md)
|
||||||
|
- [bit_t](docs/bit.md)
|
||||||
- [category_t](docs/category.md)
|
- [category_t](docs/category.md)
|
||||||
- [model_with_set_propertes_t](docs/model_with_set_propertes.md)
|
- [model_with_set_propertes_t](docs/model_with_set_propertes.md)
|
||||||
- [order_t](docs/order.md)
|
- [order_t](docs/order.md)
|
||||||
|
@ -460,6 +460,141 @@ end:
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Is this pet still available?
|
||||||
|
//
|
||||||
|
openapi_petstore_bit__e
|
||||||
|
PetAPI_isPetAvailable(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}/isAvailable")+1;
|
||||||
|
char *localVarPath = malloc(sizeOfPath);
|
||||||
|
snprintf(localVarPath, sizeOfPath, "/pet/{petId}/isAvailable");
|
||||||
|
|
||||||
|
|
||||||
|
// 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/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");
|
||||||
|
//}
|
||||||
|
//nonprimitive not container
|
||||||
|
cJSON *PetAPIlocalVarJSON = cJSON_Parse(apiClient->dataReceived);
|
||||||
|
openapi_petstore_bit__e elementToReturn = bit_parseFromJSON(PetAPIlocalVarJSON);
|
||||||
|
cJSON_Delete(PetAPIlocalVarJSON);
|
||||||
|
if(elementToReturn == 0) {
|
||||||
|
// 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 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send a picture of your happy pet
|
||||||
|
//
|
||||||
|
char*
|
||||||
|
PetAPI_sharePicture(apiClient_t *apiClient, char *picture)
|
||||||
|
{
|
||||||
|
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/picture")+1;
|
||||||
|
char *localVarPath = malloc(sizeOfPath);
|
||||||
|
snprintf(localVarPath, sizeOfPath, "/pet/picture");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Body Param
|
||||||
|
localVarBodyParameters = strdup(picture);
|
||||||
|
list_addElement(localVarHeaderType,"*/*"); //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");
|
||||||
|
//}
|
||||||
|
//primitive return type simple
|
||||||
|
char* elementToReturn = strdup((char*)apiClient->dataReceived);
|
||||||
|
|
||||||
|
if (apiClient->dataReceived) {
|
||||||
|
free(apiClient->dataReceived);
|
||||||
|
apiClient->dataReceived = NULL;
|
||||||
|
apiClient->dataReceivedLen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
list_freeList(localVarHeaderType);
|
||||||
|
|
||||||
|
free(localVarPath);
|
||||||
|
free(localVarBodyParameters);
|
||||||
|
return elementToReturn;
|
||||||
|
end:
|
||||||
|
free(localVarPath);
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Specialty of the shop
|
// Specialty of the shop
|
||||||
//
|
//
|
||||||
// Returns the kind of pet the store specializes in
|
// Returns the kind of pet the store specializes in
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "../include/keyValuePair.h"
|
#include "../include/keyValuePair.h"
|
||||||
#include "../include/binary.h"
|
#include "../include/binary.h"
|
||||||
#include "../model/api_response.h"
|
#include "../model/api_response.h"
|
||||||
|
#include "../model/bit.h"
|
||||||
#include "../model/pet.h"
|
#include "../model/pet.h"
|
||||||
#include "../model/preference.h"
|
#include "../model/preference.h"
|
||||||
|
|
||||||
@ -49,6 +50,18 @@ pet_t*
|
|||||||
PetAPI_getPetById(apiClient_t *apiClient, long petId);
|
PetAPI_getPetById(apiClient_t *apiClient, long petId);
|
||||||
|
|
||||||
|
|
||||||
|
// Is this pet still available?
|
||||||
|
//
|
||||||
|
openapi_petstore_bit__e
|
||||||
|
PetAPI_isPetAvailable(apiClient_t *apiClient, long petId);
|
||||||
|
|
||||||
|
|
||||||
|
// Send a picture of your happy pet
|
||||||
|
//
|
||||||
|
char*
|
||||||
|
PetAPI_sharePicture(apiClient_t *apiClient, char *picture);
|
||||||
|
|
||||||
|
|
||||||
// Specialty of the shop
|
// Specialty of the shop
|
||||||
//
|
//
|
||||||
// Returns the kind of pet the store specializes in
|
// Returns the kind of pet the store specializes in
|
||||||
|
@ -9,6 +9,8 @@ Method | HTTP request | Description
|
|||||||
[**PetAPI_findPetsByStatus**](PetAPI.md#PetAPI_findPetsByStatus) | **GET** /pet/findByStatus | Finds Pets by status
|
[**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_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_getPetById**](PetAPI.md#PetAPI_getPetById) | **GET** /pet/{petId} | Find pet by ID
|
||||||
|
[**PetAPI_isPetAvailable**](PetAPI.md#PetAPI_isPetAvailable) | **POST** /pet/{petId}/isAvailable | Is this pet still available?
|
||||||
|
[**PetAPI_sharePicture**](PetAPI.md#PetAPI_sharePicture) | **POST** /pet/picture | Send a picture of your happy pet
|
||||||
[**PetAPI_specialtyPet**](PetAPI.md#PetAPI_specialtyPet) | **GET** /pet/specialty | Specialty of the shop
|
[**PetAPI_specialtyPet**](PetAPI.md#PetAPI_specialtyPet) | **GET** /pet/specialty | Specialty of the shop
|
||||||
[**PetAPI_updatePet**](PetAPI.md#PetAPI_updatePet) | **PUT** /pet | Update an existing pet
|
[**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_updatePetWithForm**](PetAPI.md#PetAPI_updatePetWithForm) | **POST** /pet/{petId} | Updates a pet in the store with form data
|
||||||
@ -165,6 +167,65 @@ Name | Type | Description | Notes
|
|||||||
|
|
||||||
[[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)
|
[[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_isPetAvailable**
|
||||||
|
```c
|
||||||
|
// Is this pet still available?
|
||||||
|
//
|
||||||
|
bit_t* PetAPI_isPetAvailable(apiClient_t *apiClient, long petId);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------- | ------------- | ------------- | -------------
|
||||||
|
**apiClient** | **apiClient_t \*** | context containing the client configuration |
|
||||||
|
**petId** | **long** | ID of pet to check |
|
||||||
|
|
||||||
|
### Return type
|
||||||
|
|
||||||
|
[bit_t](bit.md) *
|
||||||
|
|
||||||
|
|
||||||
|
### Authorization
|
||||||
|
|
||||||
|
[petstore_auth](../README.md#petstore_auth)
|
||||||
|
|
||||||
|
### 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)
|
||||||
|
|
||||||
|
# **PetAPI_sharePicture**
|
||||||
|
```c
|
||||||
|
// Send a picture of your happy pet
|
||||||
|
//
|
||||||
|
char* PetAPI_sharePicture(apiClient_t *apiClient, char *picture);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Parameters
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------- | ------------- | ------------- | -------------
|
||||||
|
**apiClient** | **apiClient_t \*** | context containing the client configuration |
|
||||||
|
**picture** | **char \*** | A picture you want to share |
|
||||||
|
|
||||||
|
### Return type
|
||||||
|
|
||||||
|
char*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Authorization
|
||||||
|
|
||||||
|
No authorization required
|
||||||
|
|
||||||
|
### HTTP request headers
|
||||||
|
|
||||||
|
- **Content-Type**: Not defined
|
||||||
|
- **Accept**: */*
|
||||||
|
|
||||||
|
[[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_specialtyPet**
|
# **PetAPI_specialtyPet**
|
||||||
```c
|
```c
|
||||||
// Specialty of the shop
|
// Specialty of the shop
|
||||||
|
9
samples/client/petstore/c/docs/bit.md
Normal file
9
samples/client/petstore/c/docs/bit.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# bit_t
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
Name | Type | Description | Notes
|
||||||
|
------------ | ------------- | ------------- | -------------
|
||||||
|
|
||||||
|
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
|
||||||
|
|
||||||
|
|
@ -78,6 +78,9 @@ api_response_t *api_response_parseFromJSON(cJSON *api_responseJSON){
|
|||||||
|
|
||||||
// api_response->code
|
// api_response->code
|
||||||
cJSON *code = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "code");
|
cJSON *code = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "code");
|
||||||
|
if (cJSON_IsNull(code)) {
|
||||||
|
code = NULL;
|
||||||
|
}
|
||||||
if (code) {
|
if (code) {
|
||||||
if(!cJSON_IsNumber(code))
|
if(!cJSON_IsNumber(code))
|
||||||
{
|
{
|
||||||
@ -87,6 +90,9 @@ api_response_t *api_response_parseFromJSON(cJSON *api_responseJSON){
|
|||||||
|
|
||||||
// api_response->type
|
// api_response->type
|
||||||
cJSON *type = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "type");
|
cJSON *type = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "type");
|
||||||
|
if (cJSON_IsNull(type)) {
|
||||||
|
type = NULL;
|
||||||
|
}
|
||||||
if (type) {
|
if (type) {
|
||||||
if(!cJSON_IsString(type) && !cJSON_IsNull(type))
|
if(!cJSON_IsString(type) && !cJSON_IsNull(type))
|
||||||
{
|
{
|
||||||
@ -96,6 +102,9 @@ api_response_t *api_response_parseFromJSON(cJSON *api_responseJSON){
|
|||||||
|
|
||||||
// api_response->message
|
// api_response->message
|
||||||
cJSON *message = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "message");
|
cJSON *message = cJSON_GetObjectItemCaseSensitive(api_responseJSON, "message");
|
||||||
|
if (cJSON_IsNull(message)) {
|
||||||
|
message = NULL;
|
||||||
|
}
|
||||||
if (message) {
|
if (message) {
|
||||||
if(!cJSON_IsString(message) && !cJSON_IsNull(message))
|
if(!cJSON_IsString(message) && !cJSON_IsNull(message))
|
||||||
{
|
{
|
||||||
|
41
samples/client/petstore/c/model/bit.c
Normal file
41
samples/client/petstore/c/model/bit.c
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "bit.h"
|
||||||
|
|
||||||
|
|
||||||
|
char* bit_bit_ToString(openapi_petstore_bit__e bit) {
|
||||||
|
char *bitArray[] = { "NULL", "0", "1" };
|
||||||
|
return bitArray[bit];
|
||||||
|
}
|
||||||
|
|
||||||
|
openapi_petstore_bit__e bit_bit_FromString(char* bit) {
|
||||||
|
int stringToReturn = 0;
|
||||||
|
char *bitArray[] = { "NULL", "0", "1" };
|
||||||
|
size_t sizeofArray = sizeof(bitArray) / sizeof(bitArray[0]);
|
||||||
|
while(stringToReturn < sizeofArray) {
|
||||||
|
if(strcmp(bit, bitArray[stringToReturn]) == 0) {
|
||||||
|
return stringToReturn;
|
||||||
|
}
|
||||||
|
stringToReturn++;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON *bit_convertToJSON(openapi_petstore_bit__e bit) {
|
||||||
|
cJSON *item = cJSON_CreateObject();
|
||||||
|
if(cJSON_AddNumberToObject(item, "bit", bit) == NULL) {
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
fail:
|
||||||
|
cJSON_Delete(item);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
openapi_petstore_bit__e bit_parseFromJSON(cJSON *bitJSON) {
|
||||||
|
if(!cJSON_IsNumber(bitJSON)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return bitJSON->valueint;
|
||||||
|
}
|
32
samples/client/petstore/c/model/bit.h
Normal file
32
samples/client/petstore/c/model/bit.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* bit.h
|
||||||
|
*
|
||||||
|
* bit value
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _bit_H_
|
||||||
|
#define _bit_H_
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include "../external/cJSON.h"
|
||||||
|
#include "../include/list.h"
|
||||||
|
#include "../include/keyValuePair.h"
|
||||||
|
#include "../include/binary.h"
|
||||||
|
|
||||||
|
typedef struct bit_t bit_t;
|
||||||
|
|
||||||
|
|
||||||
|
// Enum for bit
|
||||||
|
|
||||||
|
typedef enum { openapi_petstore_bit__NULL = 0, openapi_petstore_bit___0, openapi_petstore_bit___1 } openapi_petstore_bit__e;
|
||||||
|
|
||||||
|
char* bit_bit_ToString(openapi_petstore_bit__e bit);
|
||||||
|
|
||||||
|
openapi_petstore_bit__e bit_bit_FromString(char* bit);
|
||||||
|
|
||||||
|
cJSON *bit_convertToJSON(openapi_petstore_bit__e bit);
|
||||||
|
|
||||||
|
openapi_petstore_bit__e bit_parseFromJSON(cJSON *bitJSON);
|
||||||
|
|
||||||
|
#endif /* _bit_H_ */
|
||||||
|
|
@ -64,6 +64,9 @@ category_t *category_parseFromJSON(cJSON *categoryJSON){
|
|||||||
|
|
||||||
// category->id
|
// category->id
|
||||||
cJSON *id = cJSON_GetObjectItemCaseSensitive(categoryJSON, "id");
|
cJSON *id = cJSON_GetObjectItemCaseSensitive(categoryJSON, "id");
|
||||||
|
if (cJSON_IsNull(id)) {
|
||||||
|
id = NULL;
|
||||||
|
}
|
||||||
if (id) {
|
if (id) {
|
||||||
if(!cJSON_IsNumber(id))
|
if(!cJSON_IsNumber(id))
|
||||||
{
|
{
|
||||||
@ -73,6 +76,9 @@ category_t *category_parseFromJSON(cJSON *categoryJSON){
|
|||||||
|
|
||||||
// category->name
|
// category->name
|
||||||
cJSON *name = cJSON_GetObjectItemCaseSensitive(categoryJSON, "name");
|
cJSON *name = cJSON_GetObjectItemCaseSensitive(categoryJSON, "name");
|
||||||
|
if (cJSON_IsNull(name)) {
|
||||||
|
name = NULL;
|
||||||
|
}
|
||||||
if (name) {
|
if (name) {
|
||||||
if(!cJSON_IsString(name) && !cJSON_IsNull(name))
|
if(!cJSON_IsString(name) && !cJSON_IsNull(name))
|
||||||
{
|
{
|
||||||
|
@ -64,6 +64,9 @@ MappedModel_t *MappedModel_parseFromJSON(cJSON *MappedModelJSON){
|
|||||||
|
|
||||||
// MappedModel->another_property
|
// MappedModel->another_property
|
||||||
cJSON *another_property = cJSON_GetObjectItemCaseSensitive(MappedModelJSON, "another_property");
|
cJSON *another_property = cJSON_GetObjectItemCaseSensitive(MappedModelJSON, "another_property");
|
||||||
|
if (cJSON_IsNull(another_property)) {
|
||||||
|
another_property = NULL;
|
||||||
|
}
|
||||||
if (another_property) {
|
if (another_property) {
|
||||||
if(!cJSON_IsNumber(another_property))
|
if(!cJSON_IsNumber(another_property))
|
||||||
{
|
{
|
||||||
@ -73,6 +76,9 @@ MappedModel_t *MappedModel_parseFromJSON(cJSON *MappedModelJSON){
|
|||||||
|
|
||||||
// MappedModel->uuid_property
|
// MappedModel->uuid_property
|
||||||
cJSON *uuid_property = cJSON_GetObjectItemCaseSensitive(MappedModelJSON, "uuid_property");
|
cJSON *uuid_property = cJSON_GetObjectItemCaseSensitive(MappedModelJSON, "uuid_property");
|
||||||
|
if (cJSON_IsNull(uuid_property)) {
|
||||||
|
uuid_property = NULL;
|
||||||
|
}
|
||||||
if (uuid_property) {
|
if (uuid_property) {
|
||||||
if(!cJSON_IsString(uuid_property) && !cJSON_IsNull(uuid_property))
|
if(!cJSON_IsString(uuid_property) && !cJSON_IsNull(uuid_property))
|
||||||
{
|
{
|
||||||
|
@ -101,6 +101,9 @@ model_with_set_propertes_t *model_with_set_propertes_parseFromJSON(cJSON *model_
|
|||||||
|
|
||||||
// model_with_set_propertes->tag_set
|
// model_with_set_propertes->tag_set
|
||||||
cJSON *tag_set = cJSON_GetObjectItemCaseSensitive(model_with_set_propertesJSON, "tag_set");
|
cJSON *tag_set = cJSON_GetObjectItemCaseSensitive(model_with_set_propertesJSON, "tag_set");
|
||||||
|
if (cJSON_IsNull(tag_set)) {
|
||||||
|
tag_set = NULL;
|
||||||
|
}
|
||||||
if (tag_set) {
|
if (tag_set) {
|
||||||
cJSON *tag_set_local_nonprimitive = NULL;
|
cJSON *tag_set_local_nonprimitive = NULL;
|
||||||
if(!cJSON_IsArray(tag_set)){
|
if(!cJSON_IsArray(tag_set)){
|
||||||
@ -122,6 +125,9 @@ model_with_set_propertes_t *model_with_set_propertes_parseFromJSON(cJSON *model_
|
|||||||
|
|
||||||
// model_with_set_propertes->string_set
|
// model_with_set_propertes->string_set
|
||||||
cJSON *string_set = cJSON_GetObjectItemCaseSensitive(model_with_set_propertesJSON, "string_set");
|
cJSON *string_set = cJSON_GetObjectItemCaseSensitive(model_with_set_propertesJSON, "string_set");
|
||||||
|
if (cJSON_IsNull(string_set)) {
|
||||||
|
string_set = NULL;
|
||||||
|
}
|
||||||
if (string_set) {
|
if (string_set) {
|
||||||
cJSON *string_set_local = NULL;
|
cJSON *string_set_local = NULL;
|
||||||
if(!cJSON_IsArray(string_set)) {
|
if(!cJSON_IsArray(string_set)) {
|
||||||
|
@ -122,6 +122,9 @@ order_t *order_parseFromJSON(cJSON *orderJSON){
|
|||||||
|
|
||||||
// order->id
|
// order->id
|
||||||
cJSON *id = cJSON_GetObjectItemCaseSensitive(orderJSON, "id");
|
cJSON *id = cJSON_GetObjectItemCaseSensitive(orderJSON, "id");
|
||||||
|
if (cJSON_IsNull(id)) {
|
||||||
|
id = NULL;
|
||||||
|
}
|
||||||
if (id) {
|
if (id) {
|
||||||
if(!cJSON_IsNumber(id))
|
if(!cJSON_IsNumber(id))
|
||||||
{
|
{
|
||||||
@ -131,6 +134,9 @@ order_t *order_parseFromJSON(cJSON *orderJSON){
|
|||||||
|
|
||||||
// order->pet_id
|
// order->pet_id
|
||||||
cJSON *pet_id = cJSON_GetObjectItemCaseSensitive(orderJSON, "petId");
|
cJSON *pet_id = cJSON_GetObjectItemCaseSensitive(orderJSON, "petId");
|
||||||
|
if (cJSON_IsNull(pet_id)) {
|
||||||
|
pet_id = NULL;
|
||||||
|
}
|
||||||
if (pet_id) {
|
if (pet_id) {
|
||||||
if(!cJSON_IsNumber(pet_id))
|
if(!cJSON_IsNumber(pet_id))
|
||||||
{
|
{
|
||||||
@ -140,6 +146,9 @@ order_t *order_parseFromJSON(cJSON *orderJSON){
|
|||||||
|
|
||||||
// order->quantity
|
// order->quantity
|
||||||
cJSON *quantity = cJSON_GetObjectItemCaseSensitive(orderJSON, "quantity");
|
cJSON *quantity = cJSON_GetObjectItemCaseSensitive(orderJSON, "quantity");
|
||||||
|
if (cJSON_IsNull(quantity)) {
|
||||||
|
quantity = NULL;
|
||||||
|
}
|
||||||
if (quantity) {
|
if (quantity) {
|
||||||
if(!cJSON_IsNumber(quantity))
|
if(!cJSON_IsNumber(quantity))
|
||||||
{
|
{
|
||||||
@ -149,6 +158,9 @@ order_t *order_parseFromJSON(cJSON *orderJSON){
|
|||||||
|
|
||||||
// order->ship_date
|
// order->ship_date
|
||||||
cJSON *ship_date = cJSON_GetObjectItemCaseSensitive(orderJSON, "shipDate");
|
cJSON *ship_date = cJSON_GetObjectItemCaseSensitive(orderJSON, "shipDate");
|
||||||
|
if (cJSON_IsNull(ship_date)) {
|
||||||
|
ship_date = NULL;
|
||||||
|
}
|
||||||
if (ship_date) {
|
if (ship_date) {
|
||||||
if(!cJSON_IsString(ship_date) && !cJSON_IsNull(ship_date))
|
if(!cJSON_IsString(ship_date) && !cJSON_IsNull(ship_date))
|
||||||
{
|
{
|
||||||
@ -158,6 +170,9 @@ order_t *order_parseFromJSON(cJSON *orderJSON){
|
|||||||
|
|
||||||
// order->status
|
// order->status
|
||||||
cJSON *status = cJSON_GetObjectItemCaseSensitive(orderJSON, "status");
|
cJSON *status = cJSON_GetObjectItemCaseSensitive(orderJSON, "status");
|
||||||
|
if (cJSON_IsNull(status)) {
|
||||||
|
status = NULL;
|
||||||
|
}
|
||||||
openapi_petstore_order_STATUS_e statusVariable;
|
openapi_petstore_order_STATUS_e statusVariable;
|
||||||
if (status) {
|
if (status) {
|
||||||
if(!cJSON_IsString(status))
|
if(!cJSON_IsString(status))
|
||||||
@ -169,6 +184,9 @@ order_t *order_parseFromJSON(cJSON *orderJSON){
|
|||||||
|
|
||||||
// order->complete
|
// order->complete
|
||||||
cJSON *complete = cJSON_GetObjectItemCaseSensitive(orderJSON, "complete");
|
cJSON *complete = cJSON_GetObjectItemCaseSensitive(orderJSON, "complete");
|
||||||
|
if (cJSON_IsNull(complete)) {
|
||||||
|
complete = NULL;
|
||||||
|
}
|
||||||
if (complete) {
|
if (complete) {
|
||||||
if(!cJSON_IsBool(complete))
|
if(!cJSON_IsBool(complete))
|
||||||
{
|
{
|
||||||
|
@ -177,6 +177,9 @@ pet_t *pet_parseFromJSON(cJSON *petJSON){
|
|||||||
|
|
||||||
// pet->id
|
// pet->id
|
||||||
cJSON *id = cJSON_GetObjectItemCaseSensitive(petJSON, "id");
|
cJSON *id = cJSON_GetObjectItemCaseSensitive(petJSON, "id");
|
||||||
|
if (cJSON_IsNull(id)) {
|
||||||
|
id = NULL;
|
||||||
|
}
|
||||||
if (id) {
|
if (id) {
|
||||||
if(!cJSON_IsNumber(id))
|
if(!cJSON_IsNumber(id))
|
||||||
{
|
{
|
||||||
@ -186,12 +189,18 @@ pet_t *pet_parseFromJSON(cJSON *petJSON){
|
|||||||
|
|
||||||
// pet->category
|
// pet->category
|
||||||
cJSON *category = cJSON_GetObjectItemCaseSensitive(petJSON, "category");
|
cJSON *category = cJSON_GetObjectItemCaseSensitive(petJSON, "category");
|
||||||
|
if (cJSON_IsNull(category)) {
|
||||||
|
category = NULL;
|
||||||
|
}
|
||||||
if (category) {
|
if (category) {
|
||||||
category_local_nonprim = category_parseFromJSON(category); //nonprimitive
|
category_local_nonprim = category_parseFromJSON(category); //nonprimitive
|
||||||
}
|
}
|
||||||
|
|
||||||
// pet->name
|
// pet->name
|
||||||
cJSON *name = cJSON_GetObjectItemCaseSensitive(petJSON, "name");
|
cJSON *name = cJSON_GetObjectItemCaseSensitive(petJSON, "name");
|
||||||
|
if (cJSON_IsNull(name)) {
|
||||||
|
name = NULL;
|
||||||
|
}
|
||||||
if (!name) {
|
if (!name) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
@ -204,6 +213,9 @@ pet_t *pet_parseFromJSON(cJSON *petJSON){
|
|||||||
|
|
||||||
// pet->photo_urls
|
// pet->photo_urls
|
||||||
cJSON *photo_urls = cJSON_GetObjectItemCaseSensitive(petJSON, "photoUrls");
|
cJSON *photo_urls = cJSON_GetObjectItemCaseSensitive(petJSON, "photoUrls");
|
||||||
|
if (cJSON_IsNull(photo_urls)) {
|
||||||
|
photo_urls = NULL;
|
||||||
|
}
|
||||||
if (!photo_urls) {
|
if (!photo_urls) {
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
@ -226,6 +238,9 @@ pet_t *pet_parseFromJSON(cJSON *petJSON){
|
|||||||
|
|
||||||
// pet->tags
|
// pet->tags
|
||||||
cJSON *tags = cJSON_GetObjectItemCaseSensitive(petJSON, "tags");
|
cJSON *tags = cJSON_GetObjectItemCaseSensitive(petJSON, "tags");
|
||||||
|
if (cJSON_IsNull(tags)) {
|
||||||
|
tags = NULL;
|
||||||
|
}
|
||||||
if (tags) {
|
if (tags) {
|
||||||
cJSON *tags_local_nonprimitive = NULL;
|
cJSON *tags_local_nonprimitive = NULL;
|
||||||
if(!cJSON_IsArray(tags)){
|
if(!cJSON_IsArray(tags)){
|
||||||
@ -247,6 +262,9 @@ pet_t *pet_parseFromJSON(cJSON *petJSON){
|
|||||||
|
|
||||||
// pet->status
|
// pet->status
|
||||||
cJSON *status = cJSON_GetObjectItemCaseSensitive(petJSON, "status");
|
cJSON *status = cJSON_GetObjectItemCaseSensitive(petJSON, "status");
|
||||||
|
if (cJSON_IsNull(status)) {
|
||||||
|
status = NULL;
|
||||||
|
}
|
||||||
openapi_petstore_pet_STATUS_e statusVariable;
|
openapi_petstore_pet_STATUS_e statusVariable;
|
||||||
if (status) {
|
if (status) {
|
||||||
if(!cJSON_IsString(status))
|
if(!cJSON_IsString(status))
|
||||||
|
@ -34,14 +34,8 @@ fail:
|
|||||||
}
|
}
|
||||||
|
|
||||||
openapi_petstore_preference__e preference_parseFromJSON(cJSON *preferenceJSON) {
|
openapi_petstore_preference__e preference_parseFromJSON(cJSON *preferenceJSON) {
|
||||||
openapi_petstore_preference__e *preference = NULL;
|
if(!cJSON_IsString(preferenceJSON) || (preferenceJSON->valuestring == NULL)) {
|
||||||
openapi_petstore_preference__e preferenceVariable;
|
return 0;
|
||||||
cJSON *preferenceVar = cJSON_GetObjectItemCaseSensitive(preferenceJSON, "preference");
|
|
||||||
if(!cJSON_IsString(preferenceVar) || (preferenceVar->valuestring == NULL)){
|
|
||||||
goto end;
|
|
||||||
}
|
}
|
||||||
preferenceVariable = preference_preference_FromString(preferenceVar->valuestring);
|
return preference_preference_FromString(preferenceJSON->valuestring);
|
||||||
return preferenceVariable;
|
|
||||||
end:
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,9 @@ tag_t *tag_parseFromJSON(cJSON *tagJSON){
|
|||||||
|
|
||||||
// tag->id
|
// tag->id
|
||||||
cJSON *id = cJSON_GetObjectItemCaseSensitive(tagJSON, "id");
|
cJSON *id = cJSON_GetObjectItemCaseSensitive(tagJSON, "id");
|
||||||
|
if (cJSON_IsNull(id)) {
|
||||||
|
id = NULL;
|
||||||
|
}
|
||||||
if (id) {
|
if (id) {
|
||||||
if(!cJSON_IsNumber(id))
|
if(!cJSON_IsNumber(id))
|
||||||
{
|
{
|
||||||
@ -73,6 +76,9 @@ tag_t *tag_parseFromJSON(cJSON *tagJSON){
|
|||||||
|
|
||||||
// tag->name
|
// tag->name
|
||||||
cJSON *name = cJSON_GetObjectItemCaseSensitive(tagJSON, "name");
|
cJSON *name = cJSON_GetObjectItemCaseSensitive(tagJSON, "name");
|
||||||
|
if (cJSON_IsNull(name)) {
|
||||||
|
name = NULL;
|
||||||
|
}
|
||||||
if (name) {
|
if (name) {
|
||||||
if(!cJSON_IsString(name) && !cJSON_IsNull(name))
|
if(!cJSON_IsString(name) && !cJSON_IsNull(name))
|
||||||
{
|
{
|
||||||
|
@ -193,6 +193,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->id
|
// user->id
|
||||||
cJSON *id = cJSON_GetObjectItemCaseSensitive(userJSON, "id");
|
cJSON *id = cJSON_GetObjectItemCaseSensitive(userJSON, "id");
|
||||||
|
if (cJSON_IsNull(id)) {
|
||||||
|
id = NULL;
|
||||||
|
}
|
||||||
if (id) {
|
if (id) {
|
||||||
if(!cJSON_IsNumber(id))
|
if(!cJSON_IsNumber(id))
|
||||||
{
|
{
|
||||||
@ -202,6 +205,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->username
|
// user->username
|
||||||
cJSON *username = cJSON_GetObjectItemCaseSensitive(userJSON, "username");
|
cJSON *username = cJSON_GetObjectItemCaseSensitive(userJSON, "username");
|
||||||
|
if (cJSON_IsNull(username)) {
|
||||||
|
username = NULL;
|
||||||
|
}
|
||||||
if (username) {
|
if (username) {
|
||||||
if(!cJSON_IsString(username) && !cJSON_IsNull(username))
|
if(!cJSON_IsString(username) && !cJSON_IsNull(username))
|
||||||
{
|
{
|
||||||
@ -211,6 +217,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->first_name
|
// user->first_name
|
||||||
cJSON *first_name = cJSON_GetObjectItemCaseSensitive(userJSON, "firstName");
|
cJSON *first_name = cJSON_GetObjectItemCaseSensitive(userJSON, "firstName");
|
||||||
|
if (cJSON_IsNull(first_name)) {
|
||||||
|
first_name = NULL;
|
||||||
|
}
|
||||||
if (first_name) {
|
if (first_name) {
|
||||||
if(!cJSON_IsString(first_name) && !cJSON_IsNull(first_name))
|
if(!cJSON_IsString(first_name) && !cJSON_IsNull(first_name))
|
||||||
{
|
{
|
||||||
@ -220,6 +229,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->last_name
|
// user->last_name
|
||||||
cJSON *last_name = cJSON_GetObjectItemCaseSensitive(userJSON, "lastName");
|
cJSON *last_name = cJSON_GetObjectItemCaseSensitive(userJSON, "lastName");
|
||||||
|
if (cJSON_IsNull(last_name)) {
|
||||||
|
last_name = NULL;
|
||||||
|
}
|
||||||
if (last_name) {
|
if (last_name) {
|
||||||
if(!cJSON_IsString(last_name) && !cJSON_IsNull(last_name))
|
if(!cJSON_IsString(last_name) && !cJSON_IsNull(last_name))
|
||||||
{
|
{
|
||||||
@ -229,6 +241,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->email
|
// user->email
|
||||||
cJSON *email = cJSON_GetObjectItemCaseSensitive(userJSON, "email");
|
cJSON *email = cJSON_GetObjectItemCaseSensitive(userJSON, "email");
|
||||||
|
if (cJSON_IsNull(email)) {
|
||||||
|
email = NULL;
|
||||||
|
}
|
||||||
if (email) {
|
if (email) {
|
||||||
if(!cJSON_IsString(email) && !cJSON_IsNull(email))
|
if(!cJSON_IsString(email) && !cJSON_IsNull(email))
|
||||||
{
|
{
|
||||||
@ -238,6 +253,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->password
|
// user->password
|
||||||
cJSON *password = cJSON_GetObjectItemCaseSensitive(userJSON, "password");
|
cJSON *password = cJSON_GetObjectItemCaseSensitive(userJSON, "password");
|
||||||
|
if (cJSON_IsNull(password)) {
|
||||||
|
password = NULL;
|
||||||
|
}
|
||||||
if (password) {
|
if (password) {
|
||||||
if(!cJSON_IsString(password) && !cJSON_IsNull(password))
|
if(!cJSON_IsString(password) && !cJSON_IsNull(password))
|
||||||
{
|
{
|
||||||
@ -247,6 +265,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->phone
|
// user->phone
|
||||||
cJSON *phone = cJSON_GetObjectItemCaseSensitive(userJSON, "phone");
|
cJSON *phone = cJSON_GetObjectItemCaseSensitive(userJSON, "phone");
|
||||||
|
if (cJSON_IsNull(phone)) {
|
||||||
|
phone = NULL;
|
||||||
|
}
|
||||||
if (phone) {
|
if (phone) {
|
||||||
if(!cJSON_IsString(phone) && !cJSON_IsNull(phone))
|
if(!cJSON_IsString(phone) && !cJSON_IsNull(phone))
|
||||||
{
|
{
|
||||||
@ -256,6 +277,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->user_status
|
// user->user_status
|
||||||
cJSON *user_status = cJSON_GetObjectItemCaseSensitive(userJSON, "userStatus");
|
cJSON *user_status = cJSON_GetObjectItemCaseSensitive(userJSON, "userStatus");
|
||||||
|
if (cJSON_IsNull(user_status)) {
|
||||||
|
user_status = NULL;
|
||||||
|
}
|
||||||
if (user_status) {
|
if (user_status) {
|
||||||
if(!cJSON_IsNumber(user_status))
|
if(!cJSON_IsNumber(user_status))
|
||||||
{
|
{
|
||||||
@ -265,6 +289,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->extra
|
// user->extra
|
||||||
cJSON *extra = cJSON_GetObjectItemCaseSensitive(userJSON, "extra");
|
cJSON *extra = cJSON_GetObjectItemCaseSensitive(userJSON, "extra");
|
||||||
|
if (cJSON_IsNull(extra)) {
|
||||||
|
extra = NULL;
|
||||||
|
}
|
||||||
if (extra) {
|
if (extra) {
|
||||||
cJSON *extra_local_map = NULL;
|
cJSON *extra_local_map = NULL;
|
||||||
if(!cJSON_IsObject(extra) && !cJSON_IsNull(extra))
|
if(!cJSON_IsObject(extra) && !cJSON_IsNull(extra))
|
||||||
@ -285,6 +312,9 @@ user_t *user_parseFromJSON(cJSON *userJSON){
|
|||||||
|
|
||||||
// user->preference
|
// user->preference
|
||||||
cJSON *preference = cJSON_GetObjectItemCaseSensitive(userJSON, "preference");
|
cJSON *preference = cJSON_GetObjectItemCaseSensitive(userJSON, "preference");
|
||||||
|
if (cJSON_IsNull(preference)) {
|
||||||
|
preference = NULL;
|
||||||
|
}
|
||||||
if (preference) {
|
if (preference) {
|
||||||
preference_local_nonprim = preference_parseFromJSON(preference); //custom
|
preference_local_nonprim = preference_parseFromJSON(preference); //custom
|
||||||
}
|
}
|
||||||
|
56
samples/client/petstore/c/unit-test/test_bit.c
Normal file
56
samples/client/petstore/c/unit-test/test_bit.c
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#ifndef bit_TEST
|
||||||
|
#define bit_TEST
|
||||||
|
|
||||||
|
// the following is to include only the main from the first c file
|
||||||
|
#ifndef TEST_MAIN
|
||||||
|
#define TEST_MAIN
|
||||||
|
#define bit_MAIN
|
||||||
|
#endif // TEST_MAIN
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "../external/cJSON.h"
|
||||||
|
|
||||||
|
#include "../model/bit.h"
|
||||||
|
bit_t* instantiate_bit(int include_optional);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bit_t* instantiate_bit(int include_optional) {
|
||||||
|
bit_t* bit = NULL;
|
||||||
|
if (include_optional) {
|
||||||
|
bit = bit_create(
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
bit = bit_create(
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return bit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef bit_MAIN
|
||||||
|
|
||||||
|
void test_bit(int include_optional) {
|
||||||
|
bit_t* bit_1 = instantiate_bit(include_optional);
|
||||||
|
|
||||||
|
cJSON* jsonbit_1 = bit_convertToJSON(bit_1);
|
||||||
|
printf("bit :\n%s\n", cJSON_Print(jsonbit_1));
|
||||||
|
bit_t* bit_2 = bit_parseFromJSON(jsonbit_1);
|
||||||
|
cJSON* jsonbit_2 = bit_convertToJSON(bit_2);
|
||||||
|
printf("repeating bit:\n%s\n", cJSON_Print(jsonbit_2));
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
test_bit(1);
|
||||||
|
test_bit(0);
|
||||||
|
|
||||||
|
printf("Hello world \n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // bit_MAIN
|
||||||
|
#endif // bit_TEST
|
Loading…
x
Reference in New Issue
Block a user