diff options
author | Daniel Friesel <derf@finalrewind.org> | 2018-09-17 10:02:07 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2018-09-17 10:02:07 +0200 |
commit | 4f6253aa9fec99260b8bb7b9b2e9003f5259b600 (patch) | |
tree | 2d0a3fdd10e258ecce5fb220547b1c43b870d6d2 /include/lib/ArduinoJson/Data/ValueSaver.hpp | |
parent | 30c4f72770568749b4230a6b598e3fb87a065e91 (diff) |
Import arduinojson and ubjson. Only partially working at the moment
Diffstat (limited to 'include/lib/ArduinoJson/Data/ValueSaver.hpp')
-rw-r--r-- | include/lib/ArduinoJson/Data/ValueSaver.hpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/include/lib/ArduinoJson/Data/ValueSaver.hpp b/include/lib/ArduinoJson/Data/ValueSaver.hpp new file mode 100644 index 0000000..9750f1a --- /dev/null +++ b/include/lib/ArduinoJson/Data/ValueSaver.hpp @@ -0,0 +1,52 @@ +// ArduinoJson - arduinojson.org +// Copyright Benoit Blanchon 2014-2018 +// MIT License + +#pragma once + +#include "../JsonBuffer.hpp" +#include "../JsonVariant.hpp" +#include "../StringTraits/StringTraits.hpp" +#include "../TypeTraits/EnableIf.hpp" + +namespace ArduinoJson { +namespace Internals { + +template <typename Source, typename Enable = void> +struct ValueSaver { + template <typename Destination> + static bool save(JsonBuffer*, Destination& destination, Source source) { + destination = source; + return true; + } +}; + +template <typename Source> +struct ValueSaver< + Source, typename EnableIf<StringTraits<Source>::should_duplicate>::type> { + template <typename Destination> + static bool save(JsonBuffer* buffer, Destination& dest, Source source) { + if (!StringTraits<Source>::is_null(source)) { + typename StringTraits<Source>::duplicate_t dup = + StringTraits<Source>::duplicate(source, buffer); + if (!dup) return false; + dest = dup; + } else { + dest = reinterpret_cast<const char*>(0); + } + return true; + } +}; + +// const char*, const signed char*, const unsigned char* +template <typename Char> +struct ValueSaver< + Char*, typename EnableIf<!StringTraits<Char*>::should_duplicate>::type> { + template <typename Destination> + static bool save(JsonBuffer*, Destination& dest, Char* source) { + dest = reinterpret_cast<const char*>(source); + return true; + } +}; +} +} |