diff --git a/CHANGELOG.md b/CHANGELOG.md index a1c2cec4..0ff87d37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ HEAD ---- * Added `BasicJsonDocument::shrinkToFit()` +* Added support of `uint8_t` for `serializeJson()`, `serializeJsonPretty()`, and `serializeMsgPack()` (issue #1142) v6.13.0 (2019-11-01) ------- diff --git a/extras/tests/Misc/unsigned_char.cpp b/extras/tests/Misc/unsigned_char.cpp index a09ad788..c76efe10 100644 --- a/extras/tests/Misc/unsigned_char.cpp +++ b/extras/tests/Misc/unsigned_char.cpp @@ -28,6 +28,70 @@ TEST_CASE("unsigned char[]") { REQUIRE(err == DeserializationError::Ok); } + SECTION("serializeMsgPack(unsigned char[])") { + unsigned char buffer[32]; + StaticJsonDocument 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 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 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 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 doc; + doc["hello"] = "world"; + + size_t n = serializeJsonPretty(doc, buffer); + + REQUIRE(n == 24); + } + + SECTION("serializeJsonPretty(unsigned char*)") { + unsigned char buffer[32]; + StaticJsonDocument doc; + doc["hello"] = "world"; + + size_t n = serializeJsonPretty(doc, buffer, sizeof(buffer)); + + REQUIRE(n == 24); + } + SECTION("JsonVariant") { DynamicJsonDocument doc(4096); diff --git a/src/ArduinoJson/Json/JsonSerializer.hpp b/src/ArduinoJson/Json/JsonSerializer.hpp index d3857806..ac4e041d 100644 --- a/src/ArduinoJson/Json/JsonSerializer.hpp +++ b/src/ArduinoJson/Json/JsonSerializer.hpp @@ -103,7 +103,7 @@ size_t serializeJson(const TSource &source, TDestination &destination) { } template -size_t serializeJson(const TSource &source, char *buffer, size_t bufferSize) { +size_t serializeJson(const TSource &source, void *buffer, size_t bufferSize) { return serialize(source, buffer, bufferSize); } diff --git a/src/ArduinoJson/Json/PrettyJsonSerializer.hpp b/src/ArduinoJson/Json/PrettyJsonSerializer.hpp index 7981878e..4b27926a 100644 --- a/src/ArduinoJson/Json/PrettyJsonSerializer.hpp +++ b/src/ArduinoJson/Json/PrettyJsonSerializer.hpp @@ -70,7 +70,7 @@ size_t serializeJsonPretty(const TSource &source, TDestination &destination) { } template -size_t serializeJsonPretty(const TSource &source, char *buffer, +size_t serializeJsonPretty(const TSource &source, void *buffer, size_t bufferSize) { return serialize(source, buffer, bufferSize); } diff --git a/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp b/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp index c0be6b93..ee097d98 100644 --- a/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp @@ -172,8 +172,8 @@ inline size_t serializeMsgPack(const TSource& source, TDestination& output) { return serialize(source, output); } -template -inline size_t serializeMsgPack(const TSource& source, TDestination* output, +template +inline size_t serializeMsgPack(const TSource& source, void* output, size_t size) { return serialize(source, output, size); } diff --git a/src/ArduinoJson/Serialization/serialize.hpp b/src/ArduinoJson/Serialization/serialize.hpp index e9b99eb9..bbdef3ec 100644 --- a/src/ArduinoJson/Serialization/serialize.hpp +++ b/src/ArduinoJson/Serialization/serialize.hpp @@ -24,14 +24,20 @@ size_t serialize(const TSource &source, TDestination &destination) { } template