diff options
author | Daniel Friesel <daniel.friesel@uos.de> | 2021-05-12 09:12:09 +0200 |
---|---|---|
committer | Daniel Friesel <daniel.friesel@uos.de> | 2021-05-12 09:12:09 +0200 |
commit | 39895a677e5d370824e702cfe90ebc67737b8482 (patch) | |
tree | ff5b4cc9e373d33a795d50d9333e05549bd9f2b8 /include/lib/ArduinoJson/Serialization/serialize.hpp | |
parent | 42e7fdf01c3a5701bb51e93ad6c650c3dbbc5450 (diff) |
import ArduinoJson 6.18.0
Diffstat (limited to 'include/lib/ArduinoJson/Serialization/serialize.hpp')
-rw-r--r-- | include/lib/ArduinoJson/Serialization/serialize.hpp | 54 |
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 |