luna-sysmgr-common
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JSONUtils.h File Reference
#include "Settings.h"
#include <lunaservice.h>
#include <pbnjson.h>
#include <pbnjson.hpp>
Include dependency graph for JSONUtils.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  JsonValue
 
class  JsonMessageParser
 
struct  CLSError
 
class  LSMessageJsonParser
 

Macros

#define STR(x)   #x
 
#define STANDARD_JSON_SUCCESS   "{\"returnValue\":true}"
 
#define STANDARD_JSON_ERROR(errorCode, errorText)   "{\"returnValue\":false,\"errorCode\":"STR(errorCode)",\"errorText\":\"" errorText "\"}"
 
#define MISSING_PARAMETER_ERROR(name, type)   "{\"returnValue\":false,\"errorCode\":2,\"errorText\":\"Missing '" STR(name) "' " STR(type) " parameter.\"}"
 
#define INVALID_PARAMETER_ERROR(name, type)   "{\"returnValue\":false,\"errorCode\":3,\"errorText\":\"Invalid '" STR(name) "' " STR(type) " parameter value.\"}"
 
#define IS_SYSTEM_PARAMETER(x)   ((x) && *(x) == '$')
 
#define SYSTEM_PARAMETERS   "\"$activity\":{\"type\":\"object\",\"optional\":true}"
 
#define SCHEMA_ANY   "{}"
 
#define SCHEMA_0   "{\"type\":\"object\",\"properties\":{" SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define SCHEMA_1(param)   "{\"type\":\"object\",\"properties\":{" param "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define SCHEMA_2(p1, p2)   "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define SCHEMA_3(p1, p2, p3)   "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," p3 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define SCHEMA_4(p1, p2, p3, p4)   "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," p3 "," p4 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define SCHEMA_5(p1, p2, p3, p4, p5)   "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," p3 "," p4 "," p5 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define SCHEMA_6(p1, p2, p3, p4, p5, p6)   "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," p3 "," p4 "," p5 "," p6 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define SCHEMA_7(p1, p2, p3, p4, p5, p6, p7)   "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," p3 "," p4 "," p5 "," p6 "," p7 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define SCHEMA_8(p1, p2, p3, p4, p5, p6, p7, p8)   "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," p3 "," p4 "," p5 "," p6 "," p7 "," p8 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define REQUIRED(name, type)   "\"" #name "\":{\"type\":\"" #type "\"}"
 
#define OPTIONAL(name, type)   "\"" #name "\":{\"type\":\"" #type "\",\"optional\":true}"
 
#define REQUIRED_UNION_2(name, type1, type2)   "\"" #name "\":{\"type\":[{\"type\":\"" #type1 "\"},{\"type\":\"" #type2 "\"}]}"
 
#define NAKED_OBJECT_EMPTY(objName)   "\"" #objName "\":{\"type\":\"object\",\"properties\":{" SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define OBJECT_EMPTY(objName)   "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
 
#define NAKED_OBJECT_REQUIRED_1(objName, p1, type1)   "\"" #objName "\":{\"type\":\"object\",\"properties\":{" REQUIRED(p1, type1) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define OBJECT_REQUIRED_1(objName, p1, type1)   "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" REQUIRED(p1, type1) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
 
#define NAKED_OBJECT_OPTIONAL_1(objName, p1, type1)   "\"" #objName "\":{\"type\":\"object\",\"properties\":{" OPTIONAL(p1, type1) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define OBJECT_OPTIONAL_1(objName, p1, type1)   "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" OPTIONAL(p1, type1) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
 
#define NAKED_OBJECT_REQUIRED_2(objName, p1, type1, p2, type2)   "\"" #objName "\":{\"type\":\"object\",\"properties\":{" REQUIRED(p1, type1) "," REQUIRED(p2, type2) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define OBJECT_REQUIRED_2(objName, p1, type1, p2, type2)   "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" REQUIRED(p1, type1) "," REQUIRED(p2, type2) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
 
#define NAKED_OBJECT_OPTIONAL_2(objName, p1, type1, p2, type2)   "\"" #objName "\":{\"type\":\"object\",\"properties\":{" OPTIONAL(p1, type1) "," OPTIONAL(p2, type2) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define OBJECT_OPTIONAL_2(objName, p1, type1, p2, type2)   "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" OPTIONAL(p1, type1) "," OPTIONAL(p2, type2) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
 
#define NAKED_OBJECT_REQUIRED_3(objName, p1, type1, p2, type2, p3, type3)   "\"" #objName "\":{\"type\":\"object\",\"properties\":{" REQUIRED(p1, type1) "," REQUIRED(p2, type2) "," REQUIRED(p3, type3) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define OBJECT_REQUIRED_3(objName, p1, type1, p2, type2, p3, type3)   "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" REQUIRED(p1, type1) "," REQUIRED(p2, type2) "," REQUIRED(p3, type3) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
 
#define NAKED_OBJECT_OPTIONAL_3(objName, p1, type1, p2, type2, p3, type3)   "\"" #objName "\":{\"type\":\"object\",\"properties\":{" OPTIONAL(p1, type1) "," OPTIONAL(p2, type2) "," OPTIONAL(p3, type3) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
 
#define OBJECT_OPTIONAL_3(objName, p1, type1, p2, type2, p3, type3)   "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" OPTIONAL(p1, type1) "," OPTIONAL(p2, type2) "," OPTIONAL(p3, type3) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
 
#define DEPRECATED_SERVICE_MSG()   g_critical("THIS METHOD IS DEPRECATED. PLEASE REVISIT THE CODE.")
 
#define VALIDATE_SCHEMA_AND_RETURN_OPTION(lsHandle, message, schema, schErrOption)
 
#define VALIDATE_SCHEMA_AND_RETURN(lsHandle, message, schema)
 
#define SUBSCRIBE_SCHEMA_RETURN(lsHandle, message)   VALIDATE_SCHEMA_AND_RETURN(lsHandle, message, SCHEMA_1(OPTIONAL(subscribe, boolean)))
 
#define EMPTY_SCHEMA_RETURN(lsHandle, message)   VALIDATE_SCHEMA_AND_RETURN(lsHandle, message, SCHEMA_ANY)
 

Enumerations

enum  ESchemaErrorOptions { EIgnore = 0, EValidateAndContinue, EValidateAndError, EDefault }
 

Functions

pbnjson::JValue createJsonReply (bool returnValue=true, int errorCode=0, const char *errorText=0)
 
std::string createJsonReplyString (bool returnValue=true, int errorCode=0, const char *errorText=0)
 
std::string jsonToString (pbnjson::JValue &reply, const char *schema=SCHEMA_ANY)
 

Variables

const char * STANDARD_JSON_SUCCESS
 

Macro Definition Documentation

#define DEPRECATED_SERVICE_MSG ( )    g_critical("THIS METHOD IS DEPRECATED. PLEASE REVISIT THE CODE.")
#define EMPTY_SCHEMA_RETURN (   lsHandle,
  message 
)    VALIDATE_SCHEMA_AND_RETURN(lsHandle, message, SCHEMA_ANY)

Empty/Any Schema : {}

#define INVALID_PARAMETER_ERROR (   name,
  type 
)    "{\"returnValue\":false,\"errorCode\":3,\"errorText\":\"Invalid '" STR(name) "' " STR(type) " parameter value.\"}"
#define IS_SYSTEM_PARAMETER (   x)    ((x) && *(x) == '$')
#define MISSING_PARAMETER_ERROR (   name,
  type 
)    "{\"returnValue\":false,\"errorCode\":2,\"errorText\":\"Missing '" STR(name) "' " STR(type) " parameter.\"}"
#define NAKED_OBJECT_EMPTY (   objName)    "\"" #objName "\":{\"type\":\"object\",\"properties\":{" SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define NAKED_OBJECT_OPTIONAL_1 (   objName,
  p1,
  type1 
)    "\"" #objName "\":{\"type\":\"object\",\"properties\":{" OPTIONAL(p1, type1) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define NAKED_OBJECT_OPTIONAL_2 (   objName,
  p1,
  type1,
  p2,
  type2 
)    "\"" #objName "\":{\"type\":\"object\",\"properties\":{" OPTIONAL(p1, type1) "," OPTIONAL(p2, type2) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define NAKED_OBJECT_OPTIONAL_3 (   objName,
  p1,
  type1,
  p2,
  type2,
  p3,
  type3 
)    "\"" #objName "\":{\"type\":\"object\",\"properties\":{" OPTIONAL(p1, type1) "," OPTIONAL(p2, type2) "," OPTIONAL(p3, type3) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define NAKED_OBJECT_REQUIRED_1 (   objName,
  p1,
  type1 
)    "\"" #objName "\":{\"type\":\"object\",\"properties\":{" REQUIRED(p1, type1) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define NAKED_OBJECT_REQUIRED_2 (   objName,
  p1,
  type1,
  p2,
  type2 
)    "\"" #objName "\":{\"type\":\"object\",\"properties\":{" REQUIRED(p1, type1) "," REQUIRED(p2, type2) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define NAKED_OBJECT_REQUIRED_3 (   objName,
  p1,
  type1,
  p2,
  type2,
  p3,
  type3 
)    "\"" #objName "\":{\"type\":\"object\",\"properties\":{" REQUIRED(p1, type1) "," REQUIRED(p2, type2) "," REQUIRED(p3, type3) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define OBJECT_EMPTY (   objName)    "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
#define OBJECT_OPTIONAL_1 (   objName,
  p1,
  type1 
)    "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" OPTIONAL(p1, type1) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
#define OBJECT_OPTIONAL_2 (   objName,
  p1,
  type1,
  p2,
  type2 
)    "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" OPTIONAL(p1, type1) "," OPTIONAL(p2, type2) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
#define OBJECT_OPTIONAL_3 (   objName,
  p1,
  type1,
  p2,
  type2,
  p3,
  type3 
)    "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" OPTIONAL(p1, type1) "," OPTIONAL(p2, type2) "," OPTIONAL(p3, type3) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
#define OBJECT_REQUIRED_1 (   objName,
  p1,
  type1 
)    "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" REQUIRED(p1, type1) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
#define OBJECT_REQUIRED_2 (   objName,
  p1,
  type1,
  p2,
  type2 
)    "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" REQUIRED(p1, type1) "," REQUIRED(p2, type2) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
#define OBJECT_REQUIRED_3 (   objName,
  p1,
  type1,
  p2,
  type2,
  p3,
  type3 
)    "{\"" #objName "\":{\"type\":\"object\",\"properties\":{" REQUIRED(p1, type1) "," REQUIRED(p2, type2) "," REQUIRED(p3, type3) "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}}"
#define OPTIONAL (   name,
  type 
)    "\"" #name "\":{\"type\":\"" #type "\",\"optional\":true}"
#define REQUIRED (   name,
  type 
)    "\"" #name "\":{\"type\":\"" #type "\"}"
#define REQUIRED_UNION_2 (   name,
  type1,
  type2 
)    "\"" #name "\":{\"type\":[{\"type\":\"" #type1 "\"},{\"type\":\"" #type2 "\"}]}"
#define SCHEMA_0   "{\"type\":\"object\",\"properties\":{" SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define SCHEMA_1 (   param)    "{\"type\":\"object\",\"properties\":{" param "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define SCHEMA_2 (   p1,
  p2 
)    "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define SCHEMA_3 (   p1,
  p2,
  p3 
)    "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," p3 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define SCHEMA_4 (   p1,
  p2,
  p3,
  p4 
)    "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," p3 "," p4 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define SCHEMA_5 (   p1,
  p2,
  p3,
  p4,
  p5 
)    "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," p3 "," p4 "," p5 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define SCHEMA_6 (   p1,
  p2,
  p3,
  p4,
  p5,
  p6 
)    "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," p3 "," p4 "," p5 "," p6 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define SCHEMA_7 (   p1,
  p2,
  p3,
  p4,
  p5,
  p6,
  p7 
)    "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," p3 "," p4 "," p5 "," p6 "," p7 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define SCHEMA_8 (   p1,
  p2,
  p3,
  p4,
  p5,
  p6,
  p7,
  p8 
)    "{\"type\":\"object\",\"properties\":{" p1 "," p2 "," p3 "," p4 "," p5 "," p6 "," p7 "," p8 "," SYSTEM_PARAMETERS "},\"additionalProperties\":false}"
#define SCHEMA_ANY   "{}"
#define STANDARD_JSON_ERROR (   errorCode,
  errorText 
)    "{\"returnValue\":false,\"errorCode\":"STR(errorCode)",\"errorText\":\"" errorText "\"}"
#define STANDARD_JSON_SUCCESS   "{\"returnValue\":true}"
#define STR (   x)    #x
#define SUBSCRIBE_SCHEMA_RETURN (   lsHandle,
  message 
)    VALIDATE_SCHEMA_AND_RETURN(lsHandle, message, SCHEMA_1(OPTIONAL(subscribe, boolean)))

Subscribe Schema : {"subscribe":boolean}

#define SYSTEM_PARAMETERS   "\"$activity\":{\"type\":\"object\",\"optional\":true}"
#define VALIDATE_SCHEMA_AND_RETURN (   lsHandle,
  message,
  schema 
)
Value:
{\
ESchemaErrorOptions schErrOption = EDefault; \
VALIDATE_SCHEMA_AND_RETURN_OPTION(lsHandle, message, schema, schErrOption); \
}
#define VALIDATE_SCHEMA_AND_RETURN_OPTION (   lsHandle,
  message,
  schema,
  schErrOption 
)
Value:
{\
LSMessageJsonParser jsonParser(message, schema); \
\
if (EDefault == schErrOption) \
\
if (!jsonParser.parse(__FUNCTION__, lsHandle, schErrOption)) \
return true; \
}

Commonly used schema Macros Main Validation Code

Enumeration Type Documentation

Schema Error Options

Enumerator
EIgnore 

Ignore the schema

EValidateAndContinue 

Validate, Log the error & Continue

EValidateAndError 

Validate, Log the error & Reply with correct schema

EDefault 

Default, loads the value from settings (luna.conf) file

Function Documentation

pbnjson::JValue createJsonReply ( bool  returnValue = true,
int  errorCode = 0,
const char *  errorText = 0 
)
std::string createJsonReplyString ( bool  returnValue = true,
int  errorCode = 0,
const char *  errorText = 0 
)
std::string jsonToString ( pbnjson::JValue &  reply,
const char *  schema = SCHEMA_ANY 
)

Variable Documentation

const char* STANDARD_JSON_SUCCESS