summaryrefslogtreecommitdiff
path: root/include/lib/ArduinoJson/Serialization/serialize.hpp
diff options
context:
space:
mode:
authorDaniel Friesel <daniel.friesel@uos.de>2021-05-12 09:12:09 +0200
committerDaniel Friesel <daniel.friesel@uos.de>2021-05-12 09:12:09 +0200
commit39895a677e5d370824e702cfe90ebc67737b8482 (patch)
treeff5b4cc9e373d33a795d50d9333e05549bd9f2b8 /include/lib/ArduinoJson/Serialization/serialize.hpp
parent42e7fdf01c3a5701bb51e93ad6c650c3dbbc5450 (diff)
import ArduinoJson 6.18.0
Diffstat (limited to 'include/lib/ArduinoJson/Serialization/serialize.hpp')
-rw-r--r--include/lib/ArduinoJson/Serialization/serialize.hpp54
1 files changed, 54 insertions, 0 deletions
diff --git a/include/lib/ArduinoJson/Serialization/serialize.hpp b/include/lib/ArduinoJson/Serialization/serialize.hpp
new file mode 100644
index 0000000..16d2e4e
--- /dev/null
+++ b/include/lib/ArduinoJson/Serialization/serialize.hpp
@@ -0,0 +1,54 @@
+// ArduinoJson - https://arduinojson.org
+// Copyright Benoit Blanchon 2014-2021
+// MIT License
+
+#pragma once
+
+#include <ArduinoJson/Serialization/Writer.hpp>
+
+namespace ARDUINOJSON_NAMESPACE {
+
+template <template <typename> class TSerializer, typename TSource,
+ typename TWriter>
+size_t doSerialize(const TSource &source, TWriter writer) {
+ TSerializer<TWriter> serializer(writer);
+ return source.accept(serializer);
+}
+
+template <template <typename> class TSerializer, typename TSource,
+ typename TDestination>
+size_t serialize(const TSource &source, TDestination &destination) {
+ Writer<TDestination> writer(destination);
+ return doSerialize<TSerializer>(source, writer);
+}
+
+template <template <typename> class TSerializer, typename TSource>
+typename enable_if<!TSerializer<StaticStringWriter>::producesText, size_t>::type
+serialize(const TSource &source, void *buffer, size_t bufferSize) {
+ StaticStringWriter writer(reinterpret_cast<char *>(buffer), bufferSize);
+ return doSerialize<TSerializer>(source, writer);
+}
+
+template <template <typename> class TSerializer, typename TSource>
+typename enable_if<TSerializer<StaticStringWriter>::producesText, size_t>::type
+serialize(const TSource &source, void *buffer, size_t bufferSize) {
+ StaticStringWriter writer(reinterpret_cast<char *>(buffer), bufferSize);
+ size_t n = doSerialize<TSerializer>(source, writer);
+ // add null-terminator for text output (not counted in the size)
+ if (n < bufferSize)
+ reinterpret_cast<char *>(buffer)[n] = 0;
+ return n;
+}
+
+template <template <typename> class TSerializer, typename TSource,
+ typename TChar, size_t 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]) {
+ return serialize<TSerializer>(source, buffer, N);
+}
+
+} // namespace ARDUINOJSON_NAMESPACE