in serializer/src/schemaserializer.c [28:151]
SCHEMA_SERIALIZER_RESULT SchemaSerializer_SerializeCommandMetadata(SCHEMA_MODEL_TYPE_HANDLE modelHandle, STRING_HANDLE schemaText)
{
SCHEMA_SERIALIZER_RESULT result;
if ((modelHandle == NULL) ||
(schemaText == NULL))
{
result = SCHEMA_SERIALIZER_INVALID_ARG;
LogError("(result = %s), modelHandle = %p, schemaText = %p", MU_ENUM_TO_STRING(SCHEMA_SERIALIZER_RESULT, result), modelHandle, schemaText);
}
else
{
size_t commandCount;
if ((STRING_concat(schemaText, "[") != 0) ||
(Schema_GetModelActionCount(modelHandle, &commandCount) != SCHEMA_OK))
{
result = SCHEMA_SERIALIZER_ERROR;
LOG_SCHEMA_SERIALIZER_ERROR(result);
}
else
{
size_t i;
for (i = 0; i < commandCount; i++)
{
SCHEMA_ACTION_HANDLE actionHandle = Schema_GetModelActionByIndex(modelHandle, i);
const char* commandName;
size_t argCount;
size_t j;
if ((actionHandle == NULL) ||
(STRING_concat(schemaText, "{ \"Name\":\"") != 0) ||
((commandName = Schema_GetModelActionName(actionHandle)) == NULL) ||
(STRING_concat(schemaText, commandName) != 0) ||
(STRING_concat(schemaText, "\", \"Parameters\":[") != 0) ||
(Schema_GetModelActionArgumentCount(actionHandle, &argCount) != SCHEMA_OK))
{
LogError("Failed encoding action.");
break;
}
else
{
for (j = 0; j < argCount; j++)
{
SCHEMA_ACTION_ARGUMENT_HANDLE argHandle = Schema_GetModelActionArgumentByIndex(actionHandle, j);
const char* argName;
const char* argType;
if ((argHandle == NULL) ||
(STRING_concat(schemaText, "{\"Name\":\"") != 0) ||
((argName = Schema_GetActionArgumentName(argHandle)) == NULL) ||
(STRING_concat(schemaText, argName) != 0) ||
(STRING_concat(schemaText, "\",\"Type\":\"") != 0) ||
((argType = Schema_GetActionArgumentType(argHandle)) == NULL) ||
(STRING_concat(schemaText, ConvertType(argType)) != 0))
{
LogError("Failed encoding argument.");
break;
}
else
{
if (j + 1 < argCount)
{
if (STRING_concat(schemaText, "\"},") != 0)
{
LogError("Failed to concatenate arg end.");
break;
}
}
else
{
if (STRING_concat(schemaText, "\"}") != 0)
{
LogError("Failed to concatenate arg end.");
break;
}
}
}
}
if (j < argCount)
{
break;
}
if (i + 1 < commandCount)
{
if (STRING_concat(schemaText, "]},") != 0)
{
LogError("Failed to concatenate.");
break;
}
}
else
{
if (STRING_concat(schemaText, "]}") != 0)
{
LogError("Failed to concatenate.");
break;
}
}
}
}
if (i < commandCount)
{
result = SCHEMA_SERIALIZER_ERROR;
}
else if (STRING_concat(schemaText, "]") != 0)
{
LogError("Failed to concatenate commands object end.");
result = SCHEMA_SERIALIZER_ERROR;
}
else
{
result = SCHEMA_SERIALIZER_OK;
}
}
}
return result;
}