ua_types_encoding_json.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #ifndef UA_TYPES_ENCODING_JSON_H_
  2. #define UA_TYPES_ENCODING_JSON_H_
  3. #include "util/ua_util.h"
  4. #include "ua_types.h"
  5. /**
  6. * @ingroup encoding
  7. * @defgroup encoding_json JSON Encoding
  8. *
  9. * @brief Encoding of UA datatypes in JSON. This extends the IEC 62541 standard
  10. * and is only included in the "extended" profile. The extension is intended to
  11. * be used with a webserver that transmits JSON over HTTP.
  12. *
  13. * @{
  14. */
  15. #define UA_TYPE_CALCSIZEJSON_AS(TYPE, TYPE_AS) \
  16. UA_Int32 TYPE##_calcSizeJSON(TYPE const *p) { \
  17. return TYPE_AS##_calcSizeJSON((TYPE_AS *)p); \
  18. }
  19. #define UA_TYPE_ENCODEJSON_AS(TYPE, TYPE_AS) \
  20. UA_Int32 TYPE##_encodeJSON(TYPE const *src, UA_ByteString *dst, UA_UInt32 *offset) { \
  21. return TYPE_AS##_encodeJSON((TYPE_AS *)src, dst, offset); \
  22. }
  23. #define UA_TYPE_DECODEJSON_AS(TYPE, TYPE_AS) \
  24. UA_Int32 TYPE##_decodeJSON(UA_ByteString const *src, UA_UInt32 *offset, TYPE *dst) { \
  25. return TYPE_AS##_decodeJSON(src, offset, (TYPE_AS *)dst); \
  26. }
  27. #define UA_TYPE_JSON_ENCODING_AS(TYPE, TYPE_AS) \
  28. UA_TYPE_CALCSIZEJSON_AS(TYPE, TYPE_AS) \
  29. UA_TYPE_ENCODEJSON_AS(TYPE, TYPE_AS) \
  30. UA_TYPE_DECODEJSON_AS(TYPE, TYPE_AS)
  31. #define UA_TYPE_JSON_ENCODING(TYPE) \
  32. UA_Int32 TYPE##_calcSizeJSON(TYPE const *p); \
  33. UA_Int32 TYPE##_encodeJSON(TYPE const *src, UA_ByteString *dst, UA_UInt32 *offset); \
  34. UA_Int32 TYPE##_decodeJSON(UA_ByteString const *src, UA_UInt32 *offset, TYPE *dst);
  35. UA_TYPE_JSON_ENCODING(UA_Boolean)
  36. UA_TYPE_JSON_ENCODING(UA_SByte)
  37. UA_TYPE_JSON_ENCODING(UA_Byte)
  38. UA_TYPE_JSON_ENCODING(UA_Int16)
  39. UA_TYPE_JSON_ENCODING(UA_UInt16)
  40. UA_TYPE_JSON_ENCODING(UA_Int32)
  41. UA_TYPE_JSON_ENCODING(UA_UInt32)
  42. UA_TYPE_JSON_ENCODING(UA_Int64)
  43. UA_TYPE_JSON_ENCODING(UA_UInt64)
  44. UA_TYPE_JSON_ENCODING(UA_Float)
  45. UA_TYPE_JSON_ENCODING(UA_Double)
  46. UA_TYPE_JSON_ENCODING(UA_String)
  47. UA_TYPE_JSON_ENCODING(UA_DateTime)
  48. UA_TYPE_JSON_ENCODING(UA_Guid)
  49. UA_TYPE_JSON_ENCODING(UA_ByteString)
  50. UA_TYPE_JSON_ENCODING(UA_XmlElement)
  51. UA_TYPE_JSON_ENCODING(UA_NodeId)
  52. UA_TYPE_JSON_ENCODING(UA_ExpandedNodeId)
  53. UA_TYPE_JSON_ENCODING(UA_StatusCode)
  54. UA_TYPE_JSON_ENCODING(UA_QualifiedName)
  55. UA_TYPE_JSON_ENCODING(UA_LocalizedText)
  56. UA_TYPE_JSON_ENCODING(UA_ExtensionObject)
  57. UA_TYPE_JSON_ENCODING(UA_DataValue)
  58. UA_TYPE_JSON_ENCODING(UA_Variant)
  59. UA_TYPE_JSON_ENCODING(UA_DiagnosticInfo)
  60. /* Not built-in types */
  61. UA_TYPE_JSON_ENCODING(UA_InvalidType)
  62. /// @} /* end of group */
  63. #endif /* UA_TYPES_ENCODING_JSON_H_ */