mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Added support uint8_t for serializeMsgPack() (closes #1142)
				
					
				
			This commit is contained in:
		| @@ -5,6 +5,7 @@ HEAD | |||||||
| ---- | ---- | ||||||
|  |  | ||||||
| * Added `BasicJsonDocument::shrinkToFit()` | * Added `BasicJsonDocument::shrinkToFit()` | ||||||
|  | * Added support of `uint8_t` for `serializeJson()`, `serializeJsonPretty()`, and `serializeMsgPack()` (issue #1142) | ||||||
|  |  | ||||||
| v6.13.0 (2019-11-01) | v6.13.0 (2019-11-01) | ||||||
| ------- | ------- | ||||||
|   | |||||||
| @@ -28,6 +28,70 @@ TEST_CASE("unsigned char[]") { | |||||||
|     REQUIRE(err == DeserializationError::Ok); |     REQUIRE(err == DeserializationError::Ok); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   SECTION("serializeMsgPack(unsigned char[])") { | ||||||
|  |     unsigned char buffer[32]; | ||||||
|  |     StaticJsonDocument<JSON_OBJECT_SIZE(2)> doc; | ||||||
|  |     doc["hello"] = "world"; | ||||||
|  |  | ||||||
|  |     size_t n = serializeMsgPack(doc, buffer); | ||||||
|  |  | ||||||
|  |     REQUIRE(n == 13); | ||||||
|  |     REQUIRE(memcmp(buffer, "\x81\xA5hello\xA5world", 13) == 0); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   SECTION("serializeMsgPack(unsigned char*)") { | ||||||
|  |     unsigned char buffer[32]; | ||||||
|  |     StaticJsonDocument<JSON_OBJECT_SIZE(2)> doc; | ||||||
|  |     doc["hello"] = "world"; | ||||||
|  |  | ||||||
|  |     size_t n = serializeMsgPack(doc, buffer, sizeof(buffer)); | ||||||
|  |  | ||||||
|  |     REQUIRE(n == 13); | ||||||
|  |     REQUIRE(memcmp(buffer, "\x81\xA5hello\xA5world", 13) == 0); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   SECTION("serializeJson(unsigned char[])") { | ||||||
|  |     unsigned char buffer[32]; | ||||||
|  |     StaticJsonDocument<JSON_OBJECT_SIZE(2)> doc; | ||||||
|  |     doc["hello"] = "world"; | ||||||
|  |  | ||||||
|  |     size_t n = serializeJson(doc, buffer); | ||||||
|  |  | ||||||
|  |     REQUIRE(n == 17); | ||||||
|  |     REQUIRE(memcmp(buffer, "{\"hello\":\"world\"}", n) == 0); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   SECTION("serializeJson(unsigned char*)") { | ||||||
|  |     unsigned char buffer[32]; | ||||||
|  |     StaticJsonDocument<JSON_OBJECT_SIZE(2)> doc; | ||||||
|  |     doc["hello"] = "world"; | ||||||
|  |  | ||||||
|  |     size_t n = serializeJson(doc, buffer, sizeof(buffer)); | ||||||
|  |  | ||||||
|  |     REQUIRE(n == 17); | ||||||
|  |     REQUIRE(memcmp(buffer, "{\"hello\":\"world\"}", n) == 0); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   SECTION("serializeJsonPretty(unsigned char[])") { | ||||||
|  |     unsigned char buffer[32]; | ||||||
|  |     StaticJsonDocument<JSON_OBJECT_SIZE(2)> doc; | ||||||
|  |     doc["hello"] = "world"; | ||||||
|  |  | ||||||
|  |     size_t n = serializeJsonPretty(doc, buffer); | ||||||
|  |  | ||||||
|  |     REQUIRE(n == 24); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   SECTION("serializeJsonPretty(unsigned char*)") { | ||||||
|  |     unsigned char buffer[32]; | ||||||
|  |     StaticJsonDocument<JSON_OBJECT_SIZE(2)> doc; | ||||||
|  |     doc["hello"] = "world"; | ||||||
|  |  | ||||||
|  |     size_t n = serializeJsonPretty(doc, buffer, sizeof(buffer)); | ||||||
|  |  | ||||||
|  |     REQUIRE(n == 24); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   SECTION("JsonVariant") { |   SECTION("JsonVariant") { | ||||||
|     DynamicJsonDocument doc(4096); |     DynamicJsonDocument doc(4096); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -103,7 +103,7 @@ size_t serializeJson(const TSource &source, TDestination &destination) { | |||||||
| } | } | ||||||
|  |  | ||||||
| template <typename TSource> | template <typename TSource> | ||||||
| size_t serializeJson(const TSource &source, char *buffer, size_t bufferSize) { | size_t serializeJson(const TSource &source, void *buffer, size_t bufferSize) { | ||||||
|   return serialize<JsonSerializer>(source, buffer, bufferSize); |   return serialize<JsonSerializer>(source, buffer, bufferSize); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -70,7 +70,7 @@ size_t serializeJsonPretty(const TSource &source, TDestination &destination) { | |||||||
| } | } | ||||||
|  |  | ||||||
| template <typename TSource> | template <typename TSource> | ||||||
| size_t serializeJsonPretty(const TSource &source, char *buffer, | size_t serializeJsonPretty(const TSource &source, void *buffer, | ||||||
|                            size_t bufferSize) { |                            size_t bufferSize) { | ||||||
|   return serialize<PrettyJsonSerializer>(source, buffer, bufferSize); |   return serialize<PrettyJsonSerializer>(source, buffer, bufferSize); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -172,8 +172,8 @@ inline size_t serializeMsgPack(const TSource& source, TDestination& output) { | |||||||
|   return serialize<MsgPackSerializer>(source, output); |   return serialize<MsgPackSerializer>(source, output); | ||||||
| } | } | ||||||
|  |  | ||||||
| template <typename TSource, typename TDestination> | template <typename TSource> | ||||||
| inline size_t serializeMsgPack(const TSource& source, TDestination* output, | inline size_t serializeMsgPack(const TSource& source, void* output, | ||||||
|                                size_t size) { |                                size_t size) { | ||||||
|   return serialize<MsgPackSerializer>(source, output, size); |   return serialize<MsgPackSerializer>(source, output, size); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -24,14 +24,20 @@ size_t serialize(const TSource &source, TDestination &destination) { | |||||||
| } | } | ||||||
|  |  | ||||||
| template <template <typename> class TSerializer, typename TSource> | template <template <typename> class TSerializer, typename TSource> | ||||||
| size_t serialize(const TSource &source, char *buffer, size_t bufferSize) { | size_t serialize(const TSource &source, void *buffer, size_t bufferSize) { | ||||||
|   StaticStringWriter writer(buffer, bufferSize); |   StaticStringWriter writer(reinterpret_cast<char *>(buffer), bufferSize); | ||||||
|   return doSerialize<TSerializer>(source, writer); |   return doSerialize<TSerializer>(source, writer); | ||||||
| } | } | ||||||
|  |  | ||||||
| template <template <typename> class TSerializer, typename TSource, size_t N> | template <template <typename> class TSerializer, typename TSource, | ||||||
| size_t serialize(const TSource &source, char (&buffer)[N]) { |           typename TChar, size_t N> | ||||||
|   StaticStringWriter writer(buffer, N); | #if defined _MSC_VER && _MSC_VER < 1900 | ||||||
|  | typename enable_if<sizeof(remove_reference<TChar>::type) == 1, size_t>::type | ||||||
|  | #else | ||||||
|  | typename enable_if<sizeof(TChar) == 1, size_t>::type | ||||||
|  | #endif | ||||||
|  | serialize(const TSource &source, TChar (&buffer)[N]) { | ||||||
|  |   StaticStringWriter writer(reinterpret_cast<char *>(buffer), N); | ||||||
|   return doSerialize<TSerializer>(source, writer); |   return doSerialize<TSerializer>(source, writer); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user