diff --git a/src/ArduinoJson/Array/JsonArray.hpp b/src/ArduinoJson/Array/JsonArray.hpp index 766c1531..2a0f0fb8 100644 --- a/src/ArduinoJson/Array/JsonArray.hpp +++ b/src/ArduinoJson/Array/JsonArray.hpp @@ -171,32 +171,6 @@ class JsonArray : public detail::VariantOperators { detail::ResourceManager* resources_; }; -template <> -struct Converter : private detail::VariantAttorney { - static void toJson(JsonVariantConst src, JsonVariant dst) { - detail::VariantData::copy(getData(dst), getData(src), - getResourceManager(dst)); - } - - static JsonArray fromJson(JsonVariant src) { - auto data = getData(src); - auto resources = getResourceManager(src); - return JsonArray(data != 0 ? data->asArray() : 0, resources); - } - - static detail::InvalidConversion fromJson( - JsonVariantConst); - - static bool checkJson(JsonVariantConst) { - return false; - } - - static bool checkJson(JsonVariant src) { - auto data = getData(src); - return data && data->isArray(); - } -}; - ARDUINOJSON_END_PUBLIC_NAMESPACE ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Array/JsonArrayConst.hpp b/src/ArduinoJson/Array/JsonArrayConst.hpp index 6c039d0f..d9816cf8 100644 --- a/src/ArduinoJson/Array/JsonArrayConst.hpp +++ b/src/ArduinoJson/Array/JsonArrayConst.hpp @@ -93,25 +93,6 @@ class JsonArrayConst : public detail::VariantOperators { const detail::ResourceManager* resources_; }; -template <> -struct Converter : private detail::VariantAttorney { - static void toJson(JsonVariantConst src, JsonVariant dst) { - detail::VariantData::copy(getData(dst), getData(src), - getResourceManager(dst)); - } - - static JsonArrayConst fromJson(JsonVariantConst src) { - auto data = getData(src); - auto array = data ? data->asArray() : nullptr; - return JsonArrayConst(array, getResourceManager(src)); - } - - static bool checkJson(JsonVariantConst src) { - auto data = getData(src); - return data && data->isArray(); - } -}; - // Compares the content of two arrays. // Returns true if the two arrays are equal. inline bool operator==(JsonArrayConst lhs, JsonArrayConst rhs) { diff --git a/src/ArduinoJson/Object/JsonObject.hpp b/src/ArduinoJson/Object/JsonObject.hpp index 5ff121d7..0e26c8de 100644 --- a/src/ArduinoJson/Object/JsonObject.hpp +++ b/src/ArduinoJson/Object/JsonObject.hpp @@ -202,32 +202,6 @@ class JsonObject : public detail::VariantOperators { detail::ResourceManager* resources_; }; -template <> -struct Converter : private detail::VariantAttorney { - static void toJson(JsonVariantConst src, JsonVariant dst) { - detail::VariantData::copy(getData(dst), getData(src), - getResourceManager(dst)); - } - - static JsonObject fromJson(JsonVariant src) { - auto data = getData(src); - auto resources = getResourceManager(src); - return JsonObject(data != 0 ? data->asObject() : 0, resources); - } - - static detail::InvalidConversion fromJson( - JsonVariantConst); - - static bool checkJson(JsonVariantConst) { - return false; - } - - static bool checkJson(JsonVariant src) { - auto data = getData(src); - return data && data->isObject(); - } -}; - ARDUINOJSON_END_PUBLIC_NAMESPACE ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Object/JsonObjectConst.hpp b/src/ArduinoJson/Object/JsonObjectConst.hpp index 9b55b892..49dcaffc 100644 --- a/src/ArduinoJson/Object/JsonObjectConst.hpp +++ b/src/ArduinoJson/Object/JsonObjectConst.hpp @@ -118,25 +118,6 @@ class JsonObjectConst : public detail::VariantOperators { const detail::ResourceManager* resources_; }; -template <> -struct Converter : private detail::VariantAttorney { - static void toJson(JsonVariantConst src, JsonVariant dst) { - detail::VariantData::copy(getData(dst), getData(src), - getResourceManager(dst)); - } - - static JsonObjectConst fromJson(JsonVariantConst src) { - auto data = getData(src); - auto object = data != 0 ? data->asObject() : nullptr; - return JsonObjectConst(object, getResourceManager(src)); - } - - static bool checkJson(JsonVariantConst src) { - auto data = getData(src); - return data && data->isObject(); - } -}; - inline bool operator==(JsonObjectConst lhs, JsonObjectConst rhs) { if (!lhs && !rhs) // both are null return true; diff --git a/src/ArduinoJson/Variant/ConverterImpl.hpp b/src/ArduinoJson/Variant/ConverterImpl.hpp index b52b39b5..3f80b244 100644 --- a/src/ArduinoJson/Variant/ConverterImpl.hpp +++ b/src/ArduinoJson/Variant/ConverterImpl.hpp @@ -300,4 +300,94 @@ struct ConverterNeedsWriteableRef { }; } // namespace detail +template <> +struct Converter : private detail::VariantAttorney { + static void toJson(JsonVariantConst src, JsonVariant dst) { + detail::VariantData::copy(getData(dst), getData(src), + getResourceManager(dst)); + } + + static JsonArrayConst fromJson(JsonVariantConst src) { + auto data = getData(src); + auto array = data ? data->asArray() : nullptr; + return JsonArrayConst(array, getResourceManager(src)); + } + + static bool checkJson(JsonVariantConst src) { + auto data = getData(src); + return data && data->isArray(); + } +}; + +template <> +struct Converter : private detail::VariantAttorney { + static void toJson(JsonVariantConst src, JsonVariant dst) { + detail::VariantData::copy(getData(dst), getData(src), + getResourceManager(dst)); + } + + static JsonArray fromJson(JsonVariant src) { + auto data = getData(src); + auto resources = getResourceManager(src); + return JsonArray(data != 0 ? data->asArray() : 0, resources); + } + + static detail::InvalidConversion fromJson( + JsonVariantConst); + + static bool checkJson(JsonVariantConst) { + return false; + } + + static bool checkJson(JsonVariant src) { + auto data = getData(src); + return data && data->isArray(); + } +}; + +template <> +struct Converter : private detail::VariantAttorney { + static void toJson(JsonVariantConst src, JsonVariant dst) { + detail::VariantData::copy(getData(dst), getData(src), + getResourceManager(dst)); + } + + static JsonObjectConst fromJson(JsonVariantConst src) { + auto data = getData(src); + auto object = data != 0 ? data->asObject() : nullptr; + return JsonObjectConst(object, getResourceManager(src)); + } + + static bool checkJson(JsonVariantConst src) { + auto data = getData(src); + return data && data->isObject(); + } +}; + +template <> +struct Converter : private detail::VariantAttorney { + static void toJson(JsonVariantConst src, JsonVariant dst) { + detail::VariantData::copy(getData(dst), getData(src), + getResourceManager(dst)); + } + + static JsonObject fromJson(JsonVariant src) { + auto data = getData(src); + auto resources = getResourceManager(src); + return JsonObject(data != 0 ? data->asObject() : 0, resources); + } + + static detail::InvalidConversion fromJson( + JsonVariantConst); + + static bool checkJson(JsonVariantConst) { + return false; + } + + static bool checkJson(JsonVariant src) { + auto data = getData(src); + return data && data->isObject(); + } +}; + ARDUINOJSON_END_PUBLIC_NAMESPACE