forked from bblanchon/ArduinoJson
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