Solving issue #5623 and supporting bools for C client label:"Client: C" (#5624)

* Removed stray "printf"s in
modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/CLibcurlClientCodegen.java

* Support for booleans in C client

* Update README.md

* Change to C API mustache files to solve issue #5623

* Debugging of C's modle-body.mustache, as suggested by ityuhui

* Final changes suggested by ityuhui
This commit is contained in:
Michele Albano 2020-03-23 08:11:40 +01:00 committed by GitHub
parent 9e145f0916
commit 6ceb3ff6f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 77 additions and 48 deletions

View File

@ -617,9 +617,7 @@ public class CLibcurlClientCodegen extends DefaultCodegen implements CodegenConf
} else {
setProjectName(defaultProjectName);
}
System.out.println("michele was here preprocessOpenAPI "+projectName);
additionalProperties.put(PROJECT_NAME, projectName);
System.out.println("michele was here preprocessOpenAPI after "+projectName);
}
public void setProjectName(String projectName) {

View File

@ -99,7 +99,7 @@ end:
//
{{/notes}}
{{#returnType}}{{#returnTypeIsPrimitive}}{{#returnSimpleType}}{{{.}}}*{{/returnSimpleType}}{{^returnSimpleType}}{{#isListContainer}}{{{.}}}_t*{{/isListContainer}}{{#isMapContainer}}{{{.}}}{{/isMapContainer}}{{/returnSimpleType}}{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}{{{.}}}_t*{{/returnTypeIsPrimitive}}{{/returnType}}{{^returnType}}void{{/returnType}}
{{{classname}}}_{{{operationId}}}(apiClient_t *apiClient{{#allParams}}, {{#isPrimitiveType}}{{#isNumber}}{{{dataType}}}{{/isNumber}}{{#isLong}}{{{dataType}}}{{/isLong}}{{#isInteger}}{{{dataType}}}{{/isInteger}}{{#isDouble}}{{{dataType}}}{{/isDouble}}{{#isFloat}}{{{dataType}}}{{/isFloat}}{{#isBoolean}}{{dataType}}{{/isBoolean}}{{#isEnum}}{{#isString}}{{projectName}}_{{operationId}}_{{baseName}}_e{{/isString}}{{/isEnum}}{{^isEnum}}{{#isString}}{{{dataType}}} *{{/isString}}{{/isEnum}}{{#isByteArray}}{{{dataType}}}{{/isByteArray}}{{#isDate}}{{{dataType}}}{{/isDate}}{{#isDateTime}}{{{dataType}}}{{/isDateTime}}{{#isFile}}{{{dataType}}}{{/isFile}}{{#isFreeFormObject}}{{dataType}}_t *{{/isFreeFormObject}}{{/isPrimitiveType}}{{^isPrimitiveType}}{{#isModel}}{{#isEnum}}{{datatypeWithEnum}}_e{{/isEnum}}{{^isEnum}}{{{dataType}}}_t *{{/isEnum}}{{/isModel}}{{^isModel}}{{^isListContainer}}{{#isEnum}}{{datatypeWithEnum}}_e{{/isEnum}}{{/isListContainer}}{{/isModel}}{{#isUuid}}{{dataType}} *{{/isUuid}}{{#isEmail}}{{dataType}}{{/isEmail}}{{/isPrimitiveType}}{{#isContainer}}{{#isListContainer}}{{dataType}}_t *{{/isListContainer}}{{#isMapContainer}}{{dataType}}{{/isMapContainer}}{{/isContainer}} {{{paramName}}}{{/allParams}})
{{{classname}}}_{{{operationId}}}(apiClient_t *apiClient{{#allParams}}, {{#isPrimitiveType}}{{#isNumber}}{{{dataType}}}{{/isNumber}}{{#isLong}}{{{dataType}}}{{/isLong}}{{#isInteger}}{{{dataType}}}{{/isInteger}}{{#isDouble}}{{{dataType}}}{{/isDouble}}{{#isFloat}}{{{dataType}}}{{/isFloat}}{{#isBoolean}}{{dataType}}{{/isBoolean}}{{#isEnum}}{{#isString}}{{projectName}}_{{operationId}}_{{baseName}}_e{{/isString}}{{/isEnum}}{{^isEnum}}{{#isString}}{{{dataType}}} *{{/isString}}{{/isEnum}}{{#isByteArray}}{{{dataType}}}{{/isByteArray}}{{#isDate}}{{{dataType}}}{{/isDate}}{{#isDateTime}}{{{dataType}}}{{/isDateTime}}{{#isFile}}{{{dataType}}}{{/isFile}}{{#isFreeFormObject}}{{dataType}}_t *{{/isFreeFormObject}}{{/isPrimitiveType}}{{^isListContainer}}{{^isPrimitiveType}}{{#isModel}}{{#isEnum}}{{datatypeWithEnum}}_e{{/isEnum}}{{^isEnum}}{{{dataType}}}_t *{{/isEnum}}{{/isModel}}{{^isModel}}{{#isEnum}}{{datatypeWithEnum}}_e{{/isEnum}}{{/isModel}}{{#isUuid}}{{dataType}} *{{/isUuid}}{{#isEmail}}{{dataType}}{{/isEmail}}{{/isPrimitiveType}}{{/isListContainer}}{{#isContainer}}{{#isListContainer}}{{dataType}}_t *{{/isListContainer}}{{#isMapContainer}}{{dataType}}{{/isMapContainer}}{{/isContainer}} {{{paramName}}} {{/allParams}})
{
list_t *localVarQueryParameters = {{#hasQueryParams}}list_create();{{/hasQueryParams}}{{^hasQueryParams}}NULL;{{/hasQueryParams}}
list_t *localVarHeaderParameters = {{#hasHeaderParams}}list_create();{{/hasHeaderParams}}{{^hasHeaderParams}}NULL;{{/hasHeaderParams}}

View File

@ -32,7 +32,7 @@ typedef enum { {{projectName}}_{{operationId}}_{{enumName}}_NULL = 0{{#enumVars
//
{{/notes}}
{{#returnType}}{{#returnTypeIsPrimitive}}{{#returnSimpleType}}{{{.}}}*{{/returnSimpleType}}{{^returnSimpleType}}{{#isListContainer}}{{{.}}}_t*{{/isListContainer}}{{#isMapContainer}}{{{.}}}{{/isMapContainer}}{{/returnSimpleType}}{{/returnTypeIsPrimitive}}{{^returnTypeIsPrimitive}}{{{.}}}_t*{{/returnTypeIsPrimitive}}{{/returnType}}{{^returnType}}void{{/returnType}}
{{{classname}}}_{{{operationId}}}(apiClient_t *apiClient{{#allParams}} ,{{#isPrimitiveType}}{{#isNumber}}{{{dataType}}}{{/isNumber}}{{#isLong}}{{{dataType}}}{{/isLong}}{{#isInteger}}{{{dataType}}}{{/isInteger}}{{#isDouble}}{{{dataType}}}{{/isDouble}}{{#isFloat}}{{{dataType}}}{{/isFloat}}{{#isBoolean}}{{dataType}}{{/isBoolean}}{{#isEnum}}{{#isString}}{{projectName}}_{{operationId}}_{{baseName}}_e{{/isString}}{{/isEnum}}{{^isEnum}}{{#isString}}{{{dataType}}} *{{/isString}}{{/isEnum}}{{#isByteArray}}{{{dataType}}}{{/isByteArray}}{{#isDate}}{{{dataType}}}{{/isDate}}{{#isDateTime}}{{{dataType}}}{{/isDateTime}}{{#isFile}}{{{dataType}}}{{/isFile}}{{#isFreeFormObject}}{{dataType}}_t *{{/isFreeFormObject}}{{/isPrimitiveType}}{{^isPrimitiveType}}{{#isModel}}{{#isEnum}}{{datatypeWithEnum}}_e{{/isEnum}}{{^isEnum}}{{{dataType}}}_t *{{/isEnum}}{{/isModel}}{{^isModel}}{{^isListContainer}}{{#isEnum}}{{datatypeWithEnum}}_e{{/isEnum}}{{/isListContainer}}{{/isModel}}{{#isUuid}}{{dataType}} *{{/isUuid}}{{#isEmail}}{{dataType}}{{/isEmail}}{{/isPrimitiveType}}{{#isContainer}}{{#isListContainer}}{{dataType}}_t *{{/isListContainer}}{{#isMapContainer}}{{dataType}}{{/isMapContainer}}{{/isContainer}} {{{paramName}}}{{/allParams}});
{{{classname}}}_{{{operationId}}}(apiClient_t *apiClient{{#allParams}}, {{#isPrimitiveType}}{{#isNumber}}{{{dataType}}}{{/isNumber}}{{#isLong}}{{{dataType}}}{{/isLong}}{{#isInteger}}{{{dataType}}}{{/isInteger}}{{#isDouble}}{{{dataType}}}{{/isDouble}}{{#isFloat}}{{{dataType}}}{{/isFloat}}{{#isBoolean}}{{dataType}}{{/isBoolean}}{{#isEnum}}{{#isString}}{{projectName}}_{{operationId}}_{{baseName}}_e{{/isString}}{{/isEnum}}{{^isEnum}}{{#isString}}{{{dataType}}} *{{/isString}}{{/isEnum}}{{#isByteArray}}{{{dataType}}}{{/isByteArray}}{{#isDate}}{{{dataType}}}{{/isDate}}{{#isDateTime}}{{{dataType}}}{{/isDateTime}}{{#isFile}}{{{dataType}}}{{/isFile}}{{#isFreeFormObject}}{{dataType}}_t *{{/isFreeFormObject}}{{/isPrimitiveType}}{{^isListContainer}}{{^isPrimitiveType}}{{#isModel}}{{#isEnum}}{{datatypeWithEnum}}_e{{/isEnum}}{{^isEnum}}{{{dataType}}}_t *{{/isEnum}}{{/isModel}}{{^isModel}}{{#isEnum}}{{datatypeWithEnum}}_e{{/isEnum}}{{/isModel}}{{#isUuid}}{{dataType}} *{{/isUuid}}{{#isEmail}}{{dataType}}{{/isEmail}}{{/isPrimitiveType}}{{/isListContainer}}{{#isContainer}}{{#isListContainer}}{{dataType}}_t *{{/isListContainer}}{{#isMapContainer}}{{dataType}}{{/isMapContainer}}{{/isContainer}} {{{paramName}}} {{/allParams}});
{{/operation}}

View File

@ -37,6 +37,11 @@ cJSON *{{classFilename}}_{{classname}}_convertToJSON({{projectName}}_{{classVarN
goto fail;
}
{{/isNumeric}}
{{#isBoolean}}
if(cJSON_AddBoolToObject(item, "{{{classname}}}", {{{classname}}}) == NULL) {
goto fail;
}
{{/isBoolean}}
return item;
fail:
cJSON_Delete(item);
@ -389,12 +394,18 @@ cJSON *{{classname}}_convertToJSON({{classname}}_t *{{classname}}) {
goto fail;
}
{{/isString}}
{{^isString}}
{{#isBoolean}}
if(cJSON_AddBoolToObject({{{name}}}, "", *(cJSON_bool *){{{name}}}ListEntry->data) == NULL)
{
goto fail;
}
{{/isBoolean}}
{{#isNumeric}}
if(cJSON_AddNumberToObject({{{name}}}, "", *(double *){{{name}}}ListEntry->data) == NULL)
{
goto fail;
}
{{/isString}}
{{/isNumeric}}
{{/items}}
}
{{/isPrimitiveType}}
@ -433,12 +444,18 @@ cJSON *{{classname}}_convertToJSON({{classname}}_t *{{classname}}) {
goto fail;
}
{{/isString}}
{{^isString}}
{{#isNumeric}}
if(cJSON_AddNumberToObject(localMapObject, localKeyValue->key, *(double *)localKeyValue->value) == NULL)
{
goto fail;
}
{{/isString}}
{{/isNumeric}}
{{#isBoolean}}
if(cJSON_AddBoolToObject(localMapObject, localKeyValue->key, *(cJSON_bool *)localKeyValue->value) == NULL)
{
goto fail;
}
{{/isBoolean}}
{{/items}}
}
}
@ -598,13 +615,20 @@ fail:
}
list_addElement({{{name}}}List , strdup({{{name}}}_local->valuestring));
{{/isString}}
{{^isString}}
{{#isNumeric}}
if(!cJSON_IsNumber({{{name}}}_local))
{
goto end;
}
list_addElement({{{name}}}List , &{{{name}}}_local->valuedouble);
{{/isString}}
{{/isNumeric}}
{{#isBoolean}}
if(!cJSON_IsBool({{{name}}}_local))
{
goto end;
}
list_addElement({{{name}}}List , {{{name}}}_local->valueint);
{{/isBoolean}}
{{/items}}
}
{{/isPrimitiveType}}
@ -649,13 +673,20 @@ fail:
}
localMapKeyPair = keyValuePair_create(strdup(localMapObject->string),strdup(localMapObject->valuestring));
{{/isString}}
{{^isString}}
{{#isBoolean}}
if(!cJSON_IsBool(localMapObject))
{
goto end;
}
localMapKeyPair = keyValuePair_create(strdup(localMapObject->string), &localMapObject->valueint);
{{/isBoolean}}
{{#isNumeric}}
if(!cJSON_IsNumber(localMapObject))
{
goto end;
}
localMapKeyPair = keyValuePair_create(strdup(localMapObject->string),&localMapObject->valuedouble );
{{/isString}}
{{/isNumeric}}
{{/items}}
list_addElement({{{name}}}List , localMapKeyPair);
}

View File

@ -58,7 +58,7 @@ end:
// Add a new pet to the store
//
void
PetAPI_addPet(apiClient_t *apiClient, pet_t * body)
PetAPI_addPet(apiClient_t *apiClient, pet_t * body )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
@ -117,7 +117,7 @@ end:
// Deletes a pet
//
void
PetAPI_deletePet(apiClient_t *apiClient, long petId, char * api_key)
PetAPI_deletePet(apiClient_t *apiClient, long petId , char * api_key )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = list_create();
@ -195,7 +195,7 @@ end:
// Multiple status values can be provided with comma separated strings
//
list_t*
PetAPI_findPetsByStatus(apiClient_t *apiClient, list_t * status)
PetAPI_findPetsByStatus(apiClient_t *apiClient, list_t * status )
{
list_t *localVarQueryParameters = list_create();
list_t *localVarHeaderParameters = NULL;
@ -274,7 +274,7 @@ end:
// Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
//
list_t*
PetAPI_findPetsByTags(apiClient_t *apiClient, list_t * tags)
PetAPI_findPetsByTags(apiClient_t *apiClient, list_t * tags )
{
list_t *localVarQueryParameters = list_create();
list_t *localVarHeaderParameters = NULL;
@ -353,7 +353,7 @@ end:
// Returns a single pet
//
pet_t*
PetAPI_getPetById(apiClient_t *apiClient, long petId)
PetAPI_getPetById(apiClient_t *apiClient, long petId )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
@ -432,7 +432,7 @@ end:
// Update an existing pet
//
void
PetAPI_updatePet(apiClient_t *apiClient, pet_t * body)
PetAPI_updatePet(apiClient_t *apiClient, pet_t * body )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
@ -497,7 +497,7 @@ end:
// Updates a pet in the store with form data
//
void
PetAPI_updatePetWithForm(apiClient_t *apiClient, long petId, char * name, char * status)
PetAPI_updatePetWithForm(apiClient_t *apiClient, long petId , char * name , char * status )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
@ -589,7 +589,7 @@ end:
// uploads an image
//
api_response_t*
PetAPI_uploadFile(apiClient_t *apiClient, long petId, char * additionalMetadata, binary_t* file)
PetAPI_uploadFile(apiClient_t *apiClient, long petId , char * additionalMetadata , binary_t* file )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;

View File

@ -14,13 +14,13 @@ typedef enum { openapi_petstore_findPetsByStatus_STATUS_NULL = 0, openapi_petst
// Add a new pet to the store
//
void
PetAPI_addPet(apiClient_t *apiClient ,pet_t * body);
PetAPI_addPet(apiClient_t *apiClient, pet_t * body );
// Deletes a pet
//
void
PetAPI_deletePet(apiClient_t *apiClient ,long petId ,char * api_key);
PetAPI_deletePet(apiClient_t *apiClient, long petId , char * api_key );
// Finds Pets by status
@ -28,7 +28,7 @@ PetAPI_deletePet(apiClient_t *apiClient ,long petId ,char * api_key);
// Multiple status values can be provided with comma separated strings
//
list_t*
PetAPI_findPetsByStatus(apiClient_t *apiClient ,list_t * status);
PetAPI_findPetsByStatus(apiClient_t *apiClient, list_t * status );
// Finds Pets by tags
@ -36,7 +36,7 @@ PetAPI_findPetsByStatus(apiClient_t *apiClient ,list_t * status);
// Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.
//
list_t*
PetAPI_findPetsByTags(apiClient_t *apiClient ,list_t * tags);
PetAPI_findPetsByTags(apiClient_t *apiClient, list_t * tags );
// Find pet by ID
@ -44,24 +44,24 @@ PetAPI_findPetsByTags(apiClient_t *apiClient ,list_t * tags);
// Returns a single pet
//
pet_t*
PetAPI_getPetById(apiClient_t *apiClient ,long petId);
PetAPI_getPetById(apiClient_t *apiClient, long petId );
// Update an existing pet
//
void
PetAPI_updatePet(apiClient_t *apiClient ,pet_t * body);
PetAPI_updatePet(apiClient_t *apiClient, pet_t * body );
// Updates a pet in the store with form data
//
void
PetAPI_updatePetWithForm(apiClient_t *apiClient ,long petId ,char * name ,char * status);
PetAPI_updatePetWithForm(apiClient_t *apiClient, long petId , char * name , char * status );
// uploads an image
//
api_response_t*
PetAPI_uploadFile(apiClient_t *apiClient ,long petId ,char * additionalMetadata ,binary_t* file);
PetAPI_uploadFile(apiClient_t *apiClient, long petId , char * additionalMetadata , binary_t* file );

View File

@ -17,7 +17,7 @@
// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
//
void
StoreAPI_deleteOrder(apiClient_t *apiClient, char * orderId)
StoreAPI_deleteOrder(apiClient_t *apiClient, char * orderId )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
@ -139,7 +139,7 @@ end:
// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions
//
order_t*
StoreAPI_getOrderById(apiClient_t *apiClient, long orderId)
StoreAPI_getOrderById(apiClient_t *apiClient, long orderId )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
@ -218,7 +218,7 @@ end:
// Place an order for a pet
//
order_t*
StoreAPI_placeOrder(apiClient_t *apiClient, order_t * body)
StoreAPI_placeOrder(apiClient_t *apiClient, order_t * body )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;

View File

@ -12,7 +12,7 @@
// For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors
//
void
StoreAPI_deleteOrder(apiClient_t *apiClient ,char * orderId);
StoreAPI_deleteOrder(apiClient_t *apiClient, char * orderId );
// Returns pet inventories by status
@ -28,12 +28,12 @@ StoreAPI_getInventory(apiClient_t *apiClient);
// For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions
//
order_t*
StoreAPI_getOrderById(apiClient_t *apiClient ,long orderId);
StoreAPI_getOrderById(apiClient_t *apiClient, long orderId );
// Place an order for a pet
//
order_t*
StoreAPI_placeOrder(apiClient_t *apiClient ,order_t * body);
StoreAPI_placeOrder(apiClient_t *apiClient, order_t * body );

View File

@ -17,7 +17,7 @@
// This can only be done by the logged in user.
//
void
UserAPI_createUser(apiClient_t *apiClient, user_t * body)
UserAPI_createUser(apiClient_t *apiClient, user_t * body )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
@ -74,7 +74,7 @@ end:
// Creates list of users with given input array
//
void
UserAPI_createUsersWithArrayInput(apiClient_t *apiClient, list_t * body)
UserAPI_createUsersWithArrayInput(apiClient_t *apiClient, list_t * body )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
@ -153,7 +153,7 @@ end:
// Creates list of users with given input array
//
void
UserAPI_createUsersWithListInput(apiClient_t *apiClient, list_t * body)
UserAPI_createUsersWithListInput(apiClient_t *apiClient, list_t * body )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
@ -234,7 +234,7 @@ end:
// This can only be done by the logged in user.
//
void
UserAPI_deleteUser(apiClient_t *apiClient, char * username)
UserAPI_deleteUser(apiClient_t *apiClient, char * username )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
@ -294,7 +294,7 @@ end:
// Get user by user name
//
user_t*
UserAPI_getUserByName(apiClient_t *apiClient, char * username)
UserAPI_getUserByName(apiClient_t *apiClient, char * username )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;
@ -369,7 +369,7 @@ end:
// Logs user into the system
//
char*
UserAPI_loginUser(apiClient_t *apiClient, char * username, char * password)
UserAPI_loginUser(apiClient_t *apiClient, char * username , char * password )
{
list_t *localVarQueryParameters = list_create();
list_t *localVarHeaderParameters = NULL;
@ -520,7 +520,7 @@ end:
// This can only be done by the logged in user.
//
void
UserAPI_updateUser(apiClient_t *apiClient, char * username, user_t * body)
UserAPI_updateUser(apiClient_t *apiClient, char * username , user_t * body )
{
list_t *localVarQueryParameters = NULL;
list_t *localVarHeaderParameters = NULL;

View File

@ -12,19 +12,19 @@
// This can only be done by the logged in user.
//
void
UserAPI_createUser(apiClient_t *apiClient ,user_t * body);
UserAPI_createUser(apiClient_t *apiClient, user_t * body );
// Creates list of users with given input array
//
void
UserAPI_createUsersWithArrayInput(apiClient_t *apiClient ,list_t * body);
UserAPI_createUsersWithArrayInput(apiClient_t *apiClient, list_t * body );
// Creates list of users with given input array
//
void
UserAPI_createUsersWithListInput(apiClient_t *apiClient ,list_t * body);
UserAPI_createUsersWithListInput(apiClient_t *apiClient, list_t * body );
// Delete user
@ -32,19 +32,19 @@ UserAPI_createUsersWithListInput(apiClient_t *apiClient ,list_t * body);
// This can only be done by the logged in user.
//
void
UserAPI_deleteUser(apiClient_t *apiClient ,char * username);
UserAPI_deleteUser(apiClient_t *apiClient, char * username );
// Get user by user name
//
user_t*
UserAPI_getUserByName(apiClient_t *apiClient ,char * username);
UserAPI_getUserByName(apiClient_t *apiClient, char * username );
// Logs user into the system
//
char*
UserAPI_loginUser(apiClient_t *apiClient ,char * username ,char * password);
UserAPI_loginUser(apiClient_t *apiClient, char * username , char * password );
// Logs out current logged in user session
@ -58,6 +58,6 @@ UserAPI_logoutUser(apiClient_t *apiClient);
// This can only be done by the logged in user.
//
void
UserAPI_updateUser(apiClient_t *apiClient ,char * username ,user_t * body);
UserAPI_updateUser(apiClient_t *apiClient, char * username , user_t * body );