diff --git a/src/ArduinoJson.hpp b/src/ArduinoJson.hpp index 0604527d..583ccddc 100644 --- a/src/ArduinoJson.hpp +++ b/src/ArduinoJson.hpp @@ -40,7 +40,6 @@ #include "ArduinoJson/Object/MemberProxy.hpp" #include "ArduinoJson/Variant/ConverterImpl.hpp" #include "ArduinoJson/Variant/VariantCompare.hpp" -#include "ArduinoJson/Variant/VariantImpl.hpp" #include "ArduinoJson/Json/JsonDeserializer.hpp" #include "ArduinoJson/Json/JsonSerializer.hpp" diff --git a/src/ArduinoJson/Array/JsonArray.hpp b/src/ArduinoJson/Array/JsonArray.hpp index 06e3cc1b..541c8e7b 100644 --- a/src/ArduinoJson/Array/JsonArray.hpp +++ b/src/ArduinoJson/Array/JsonArray.hpp @@ -200,3 +200,14 @@ struct Converter : private detail::VariantAttorney { }; ARDUINOJSON_END_PUBLIC_NAMESPACE + +ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE + +template +template +inline typename enable_if::value, JsonArray>::type +VariantRefBase::to() const { + return JsonArray(getPool(), variantToArray(getOrCreateData(), getPool())); +} + +ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Object/JsonObject.hpp b/src/ArduinoJson/Object/JsonObject.hpp index 42cf5ffd..f196d8b8 100644 --- a/src/ArduinoJson/Object/JsonObject.hpp +++ b/src/ArduinoJson/Object/JsonObject.hpp @@ -234,3 +234,14 @@ struct Converter : private detail::VariantAttorney { }; ARDUINOJSON_END_PUBLIC_NAMESPACE + +ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE + +template +template +typename enable_if::value, JsonObject>::type +VariantRefBase::to() const { + return JsonObject(getPool(), variantToObject(getOrCreateData(), getPool())); +} + +ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Variant/JsonVariant.hpp b/src/ArduinoJson/Variant/JsonVariant.hpp index d1f122e9..52f675e5 100644 --- a/src/ArduinoJson/Variant/JsonVariant.hpp +++ b/src/ArduinoJson/Variant/JsonVariant.hpp @@ -79,3 +79,37 @@ struct Converter : private detail::VariantAttorney { }; ARDUINOJSON_END_PUBLIC_NAMESPACE + +ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE + +template +inline JsonVariant VariantRefBase::add() const { + return JsonVariant(getPool(), + variantAddElement(getOrCreateData(), getPool())); +} + +template +inline JsonVariant VariantRefBase::getVariant() const { + return JsonVariant(getPool(), getData()); +} + +template +inline JsonVariant VariantRefBase::getOrCreateVariant() const { + return JsonVariant(getPool(), getOrCreateData()); +} + +template +template +typename enable_if::value, JsonVariant>::type +VariantRefBase::to() const { + variantSetNull(getOrCreateData(), getPool()); + return *this; +} + +template +inline void convertToJson(const VariantRefBase& src, + JsonVariant dst) { + dst.set(src.template as()); +} + +ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp deleted file mode 100644 index ead2df2d..00000000 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ /dev/null @@ -1,63 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2023, Benoit BLANCHON -// MIT License - -#pragma once - -#include -#include -#include - -ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE - -template -inline JsonVariant VariantRefBase::add() const { - return JsonVariant(getPool(), - variantAddElement(getOrCreateData(), getPool())); -} - -template -inline JsonVariant VariantRefBase::getVariant() const { - return JsonVariant(getPool(), getData()); -} - -template -inline JsonVariant VariantRefBase::getOrCreateVariant() const { - return JsonVariant(getPool(), getOrCreateData()); -} - -template -template -inline typename enable_if::value, JsonArray>::type -VariantRefBase::to() const { - return JsonArray(getPool(), variantToArray(getOrCreateData(), getPool())); -} - -template -template -typename enable_if::value, JsonObject>::type -VariantRefBase::to() const { - return JsonObject(getPool(), variantToObject(getOrCreateData(), getPool())); -} - -template -template -typename enable_if::value, JsonVariant>::type -VariantRefBase::to() const { - variantSetNull(getOrCreateData(), getPool()); - return *this; -} - -template -inline void convertToJson(const VariantRefBase& src, - JsonVariant dst) { - dst.set(src.template as()); -} - -inline void VariantSlot::setKey(StringNode* k) { - ARDUINOJSON_ASSERT(k); - flags_ |= OWNED_KEY_BIT; - key_ = k->data; -} - -ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Variant/VariantSlot.hpp b/src/ArduinoJson/Variant/VariantSlot.hpp index 291637ad..d36fe405 100644 --- a/src/ArduinoJson/Variant/VariantSlot.hpp +++ b/src/ArduinoJson/Variant/VariantSlot.hpp @@ -89,7 +89,11 @@ class VariantSlot { key_ = k; } - void setKey(StringNode* k); + void setKey(StringNode* k) { + ARDUINOJSON_ASSERT(k); + flags_ |= OWNED_KEY_BIT; + key_ = k->data; + } const char* key() const { return key_;