diff --git a/src/ArduinoJson/Variant/VariantRefBase.hpp b/src/ArduinoJson/Variant/VariantRefBase.hpp index d807f293..0effaf02 100644 --- a/src/ArduinoJson/Variant/VariantRefBase.hpp +++ b/src/ArduinoJson/Variant/VariantRefBase.hpp @@ -56,9 +56,7 @@ class VariantRefBase : public VariantTag { // https://arduinojson.org/v7/api/jsonvariant/as/ template FORCE_INLINE typename enable_if::value, T>::type - as() const { - return Converter::fromJson(getVariant()); - } + as() const; template ::value>::type> @@ -88,9 +86,7 @@ class VariantRefBase : public VariantTag { template FORCE_INLINE typename enable_if::value, bool>::type - is() const { - return Converter::checkJson(getVariant()); - } + is() const; // Returns true if the value is of the specified type. // https://arduinojson.org/v7/api/jsonvariant/is/ @@ -106,20 +102,12 @@ class VariantRefBase : public VariantTag { // Copies the specified value. // https://arduinojson.org/v7/api/jsonvariant/set/ template - FORCE_INLINE bool set(const T& value) const { - Converter::toJson(value, getOrCreateVariant()); - auto resources = getResourceManager(); - return resources && !resources->overflowed(); - } + FORCE_INLINE bool set(const T& value) const; // Copies the specified value. // https://arduinojson.org/v7/api/jsonvariant/set/ template - FORCE_INLINE bool set(T* value) const { - Converter::toJson(value, getOrCreateVariant()); - auto resources = getResourceManager(); - return resources && !resources->overflowed(); - } + FORCE_INLINE bool set(T* value) const; // Returns the size of the array or object. // https://arduinojson.org/v7/api/jsonvariant/size/ diff --git a/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp b/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp index 7f925746..2db34daa 100644 --- a/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp +++ b/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp @@ -15,6 +15,13 @@ inline JsonVariant VariantRefBase::add() const { return add(); } +template +template +inline typename enable_if::value, T>::type +VariantRefBase::as() const { + return Converter::fromJson(getVariant()); +} + template inline JsonArray VariantRefBase::createNestedArray() const { return add(); @@ -93,6 +100,13 @@ inline JsonVariant VariantRefBase::getOrCreateVariant() const { return JsonVariant(getOrCreateData(), getResourceManager()); } +template +template +inline typename enable_if::value, bool>::type +VariantRefBase::is() const { + return Converter::checkJson(getVariant()); +} + template inline ElementProxy VariantRefBase::operator[]( size_t index) const { @@ -115,6 +129,22 @@ VariantRefBase::operator[](const TString& key) const { return MemberProxy(derived(), key); } +template +template +inline bool VariantRefBase::set(const T& value) const { + Converter::toJson(value, getOrCreateVariant()); + auto resources = getResourceManager(); + return resources && !resources->overflowed(); +} + +template +template +inline bool VariantRefBase::set(T* value) const { + Converter::toJson(value, getOrCreateVariant()); + auto resources = getResourceManager(); + return resources && !resources->overflowed(); +} + template template inline typename enable_if::value, JsonArray>::type