From fc2e3a4ab37d2c1ad833dfe77e3acc50d6c9d374 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 29 May 2018 08:31:17 +0200 Subject: [PATCH] Added `serializeMsgPack()` and `measureMsgPack()` (closes #358) --- .gitignore | 1 + CHANGELOG.md | 2 +- src/ArduinoJson.hpp | 10 +- .../ArduinoStreamReader.hpp | 0 .../CharPointerReader.hpp | 0 .../DeserializationError.hpp | 0 .../FlashStringReader.hpp | 0 .../IteratorReader.hpp | 0 .../StdStreamReader.hpp | 0 .../Deserialization/deserialize.hpp | 82 ++++++++ src/ArduinoJson/DynamicJsonDocument.hpp | 2 +- src/ArduinoJson/Json/JsonDeserializer.hpp | 51 +++-- src/ArduinoJson/Json/JsonSerializer.hpp | 197 ++++++------------ src/ArduinoJson/Json/PrettyJsonSerializer.hpp | 57 +++++ src/ArduinoJson/JsonArray.hpp | 2 +- src/ArduinoJson/JsonArraySubscript.hpp | 2 +- src/ArduinoJson/JsonObject.hpp | 2 +- src/ArduinoJson/JsonObjectSubscript.hpp | 2 +- src/ArduinoJson/JsonVariant.hpp | 4 +- .../MsgPack/MsgPackDeserializer.hpp | 50 +++-- src/ArduinoJson/MsgPack/MsgPackSerializer.hpp | 191 +++++++++++++++++ src/ArduinoJson/MsgPack/endianess.hpp | 8 +- src/ArduinoJson/Polyfills/utility.hpp | 16 ++ src/ArduinoJson/Reading/Reader.hpp | 11 - .../{Print => Serialization}/DummyPrint.hpp | 1 - .../DynamicStringBuilder.hpp | 0 .../StaticStringBuilder.hpp | 4 +- .../StreamPrintAdapter.hpp | 0 src/ArduinoJson/Serialization/measure.hpp | 21 ++ src/ArduinoJson/Serialization/serialize.hpp | 55 +++++ src/ArduinoJson/StaticJsonDocument.hpp | 2 +- .../StringCopier.hpp} | 6 +- .../StringMover.hpp} | 8 +- .../StringStorage/StringStorage.hpp | 44 ++++ src/ArduinoJson/Writing/Writer.hpp | 44 ---- src/ArduinoJson/deserializeJson.hpp | 58 ------ src/ArduinoJson/deserializeMsgPack.hpp | 63 ------ test/CMakeLists.txt | 3 +- .../JsonDeserializer/DeserializationError.cpp | 8 +- test/JsonSerializer/std_string.cpp | 8 +- test/JsonWriter/writeFloat.cpp | 2 +- test/JsonWriter/writeString.cpp | 2 +- .../CMakeLists.txt | 6 +- .../deserializeArray.cpp | 2 +- .../deserializeObject.cpp | 0 .../deserializeStaticVariant.cpp | 0 .../deserializeVariant.cpp | 2 +- .../doubleToFloat.cpp | 0 .../incompleteInput.cpp | 0 .../nestingLimit.cpp | 0 .../notSupported.cpp | 0 .../std_istream.cpp | 0 .../std_string.cpp | 0 test/MsgPackSerializer/CMakeLists.txt | 14 ++ test/MsgPackSerializer/destination_types.cpp | 47 +++++ test/MsgPackSerializer/measure.cpp | 14 ++ test/MsgPackSerializer/serializeArray.cpp | 60 ++++++ test/MsgPackSerializer/serializeObject.cpp | 73 +++++++ test/MsgPackSerializer/serializeVariant.cpp | 129 ++++++++++++ 59 files changed, 975 insertions(+), 391 deletions(-) rename src/ArduinoJson/{Reading => Deserialization}/ArduinoStreamReader.hpp (100%) rename src/ArduinoJson/{Reading => Deserialization}/CharPointerReader.hpp (100%) rename src/ArduinoJson/{ => Deserialization}/DeserializationError.hpp (100%) rename src/ArduinoJson/{Reading => Deserialization}/FlashStringReader.hpp (100%) rename src/ArduinoJson/{Reading => Deserialization}/IteratorReader.hpp (100%) rename src/ArduinoJson/{Reading => Deserialization}/StdStreamReader.hpp (100%) create mode 100644 src/ArduinoJson/Deserialization/deserialize.hpp create mode 100644 src/ArduinoJson/Json/PrettyJsonSerializer.hpp create mode 100644 src/ArduinoJson/MsgPack/MsgPackSerializer.hpp create mode 100644 src/ArduinoJson/Polyfills/utility.hpp delete mode 100644 src/ArduinoJson/Reading/Reader.hpp rename src/ArduinoJson/{Print => Serialization}/DummyPrint.hpp (86%) rename src/ArduinoJson/{Print => Serialization}/DynamicStringBuilder.hpp (100%) rename src/ArduinoJson/{Print => Serialization}/StaticStringBuilder.hpp (92%) rename src/ArduinoJson/{Print => Serialization}/StreamPrintAdapter.hpp (100%) create mode 100644 src/ArduinoJson/Serialization/measure.hpp create mode 100644 src/ArduinoJson/Serialization/serialize.hpp rename src/ArduinoJson/{Writing/JsonBufferWriter.hpp => StringStorage/StringCopier.hpp} (78%) rename src/ArduinoJson/{Writing/StringWriter.hpp => StringStorage/StringMover.hpp} (83%) create mode 100644 src/ArduinoJson/StringStorage/StringStorage.hpp delete mode 100644 src/ArduinoJson/Writing/Writer.hpp delete mode 100644 src/ArduinoJson/deserializeJson.hpp delete mode 100644 src/ArduinoJson/deserializeMsgPack.hpp rename test/{MsgPack => MsgPackDeserializer}/CMakeLists.txt (66%) rename test/{MsgPack => MsgPackDeserializer}/deserializeArray.cpp (97%) rename test/{MsgPack => MsgPackDeserializer}/deserializeObject.cpp (100%) rename test/{MsgPack => MsgPackDeserializer}/deserializeStaticVariant.cpp (100%) rename test/{MsgPack => MsgPackDeserializer}/deserializeVariant.cpp (98%) rename test/{MsgPack => MsgPackDeserializer}/doubleToFloat.cpp (100%) rename test/{MsgPack => MsgPackDeserializer}/incompleteInput.cpp (100%) rename test/{MsgPack => MsgPackDeserializer}/nestingLimit.cpp (100%) rename test/{MsgPack => MsgPackDeserializer}/notSupported.cpp (100%) rename test/{MsgPack => MsgPackDeserializer}/std_istream.cpp (100%) rename test/{MsgPack => MsgPackDeserializer}/std_string.cpp (100%) create mode 100644 test/MsgPackSerializer/CMakeLists.txt create mode 100644 test/MsgPackSerializer/destination_types.cpp create mode 100644 test/MsgPackSerializer/measure.cpp create mode 100644 test/MsgPackSerializer/serializeArray.cpp create mode 100644 test/MsgPackSerializer/serializeObject.cpp create mode 100644 test/MsgPackSerializer/serializeVariant.cpp diff --git a/.gitignore b/.gitignore index 567dc13b..1071ea6b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ /fuzzing/*_fuzzer /fuzzing/*_fuzzer.options /fuzzing/*_fuzzer_seed_corpus.zip +.vs/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 78b53dee..817a380a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ HEAD * Added `deserializeJson()` * Added `serializeJson()` and `serializeJsonPretty()` * Added `measureJson()` and `measureJsonPretty()` -* Added `deserializeMsgPack()` (issue #358) +* Added `serializeMsgPack()`, `deserializeMsgPack()` and `measureMsgPack()` (issue #358) * Added example `MsgPackParser.ino` (issue #358) * Added support for non zero-terminated strings (issue #704) * Removed `JsonBuffer::parseArray()`, `parseObject()` and `parse()` diff --git a/src/ArduinoJson.hpp b/src/ArduinoJson.hpp index 8b7e3594..bbe94a3c 100644 --- a/src/ArduinoJson.hpp +++ b/src/ArduinoJson.hpp @@ -5,11 +5,13 @@ #pragma once #include "ArduinoJson/DynamicJsonDocument.hpp" -#include "ArduinoJson/StaticJsonDocument.hpp" -#include "ArduinoJson/deserializeJson.hpp" -#include "ArduinoJson/deserializeMsgPack.hpp" - +#include "ArduinoJson/Json/JsonDeserializer.hpp" #include "ArduinoJson/Json/JsonSerializer.hpp" +#include "ArduinoJson/Json/PrettyJsonSerializer.hpp" +#include "ArduinoJson/MsgPack/MsgPackDeserializer.hpp" +#include "ArduinoJson/MsgPack/MsgPackSerializer.hpp" +#include "ArduinoJson/StaticJsonDocument.hpp" + #include "ArduinoJson/JsonArrayImpl.hpp" #include "ArduinoJson/JsonObjectImpl.hpp" #include "ArduinoJson/JsonVariantImpl.hpp" diff --git a/src/ArduinoJson/Reading/ArduinoStreamReader.hpp b/src/ArduinoJson/Deserialization/ArduinoStreamReader.hpp similarity index 100% rename from src/ArduinoJson/Reading/ArduinoStreamReader.hpp rename to src/ArduinoJson/Deserialization/ArduinoStreamReader.hpp diff --git a/src/ArduinoJson/Reading/CharPointerReader.hpp b/src/ArduinoJson/Deserialization/CharPointerReader.hpp similarity index 100% rename from src/ArduinoJson/Reading/CharPointerReader.hpp rename to src/ArduinoJson/Deserialization/CharPointerReader.hpp diff --git a/src/ArduinoJson/DeserializationError.hpp b/src/ArduinoJson/Deserialization/DeserializationError.hpp similarity index 100% rename from src/ArduinoJson/DeserializationError.hpp rename to src/ArduinoJson/Deserialization/DeserializationError.hpp diff --git a/src/ArduinoJson/Reading/FlashStringReader.hpp b/src/ArduinoJson/Deserialization/FlashStringReader.hpp similarity index 100% rename from src/ArduinoJson/Reading/FlashStringReader.hpp rename to src/ArduinoJson/Deserialization/FlashStringReader.hpp diff --git a/src/ArduinoJson/Reading/IteratorReader.hpp b/src/ArduinoJson/Deserialization/IteratorReader.hpp similarity index 100% rename from src/ArduinoJson/Reading/IteratorReader.hpp rename to src/ArduinoJson/Deserialization/IteratorReader.hpp diff --git a/src/ArduinoJson/Reading/StdStreamReader.hpp b/src/ArduinoJson/Deserialization/StdStreamReader.hpp similarity index 100% rename from src/ArduinoJson/Reading/StdStreamReader.hpp rename to src/ArduinoJson/Deserialization/StdStreamReader.hpp diff --git a/src/ArduinoJson/Deserialization/deserialize.hpp b/src/ArduinoJson/Deserialization/deserialize.hpp new file mode 100644 index 00000000..25abe9de --- /dev/null +++ b/src/ArduinoJson/Deserialization/deserialize.hpp @@ -0,0 +1,82 @@ +// ArduinoJson - arduinojson.org +// Copyright Benoit Blanchon 2014-2018 +// MIT License + +#pragma once + +#include "../StringStorage/StringStorage.hpp" +#include "./ArduinoStreamReader.hpp" +#include "./CharPointerReader.hpp" +#include "./DeserializationError.hpp" +#include "./FlashStringReader.hpp" +#include "./IteratorReader.hpp" +#include "./StdStreamReader.hpp" + +namespace ArduinoJson { +namespace Internals { + +template