From 2507ee2e5619cf77798b8864a3dd38e2d7ce3d2d Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 25 Jun 2019 08:56:14 +0200 Subject: [PATCH] Fixed assignment of `JsonDocument` to `JsonVariant` (issue #1023) --- CHANGELOG.md | 5 +++++ src/ArduinoJson/Document/JsonDocument.hpp | 4 ++++ src/ArduinoJson/Variant/VariantRef.hpp | 1 + test/JsonVariant/set.cpp | 16 ++++++++++++++++ 4 files changed, 26 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c8a34693..a3aa1691 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ ArduinoJson: change log ======================= +HEAD +---- + +* Fixed assignment of `JsonDocument` to `JsonVariant` (issue #1023) + v6.11.1 (2019-06-21) ------- diff --git a/src/ArduinoJson/Document/JsonDocument.hpp b/src/ArduinoJson/Document/JsonDocument.hpp index b070af54..0934572e 100644 --- a/src/ArduinoJson/Document/JsonDocument.hpp +++ b/src/ArduinoJson/Document/JsonDocument.hpp @@ -278,6 +278,10 @@ class JsonDocument : public Visitable { _data.remove(adaptString(key)); } + FORCE_INLINE operator VariantConstRef() const { + return VariantConstRef(&_data); + } + protected: JsonDocument(MemoryPool pool) : _pool(pool) { _data.setNull(); diff --git a/src/ArduinoJson/Variant/VariantRef.hpp b/src/ArduinoJson/Variant/VariantRef.hpp index cf3a438d..00f82057 100644 --- a/src/ArduinoJson/Variant/VariantRef.hpp +++ b/src/ArduinoJson/Variant/VariantRef.hpp @@ -222,6 +222,7 @@ class VariantRef : public VariantRefBase, // set(ArrayConstRef) // set(ObjectRef) // set(ObjecConstRef) + // set(const JsonDocument&) template typename enable_if::value, bool>::type set( const TVariant &value) const; diff --git a/test/JsonVariant/set.cpp b/test/JsonVariant/set.cpp index 1a15a814..577c0048 100644 --- a/test/JsonVariant/set.cpp +++ b/test/JsonVariant/set.cpp @@ -108,3 +108,19 @@ TEST_CASE("JsonVariant with not enough memory") { REQUIRE(v.isNull()); } } + +TEST_CASE("JsonVariant::set(DynamicJsonDocument)") { + DynamicJsonDocument doc1(1024); + doc1["hello"] = "world"; + + DynamicJsonDocument doc2(1024); + JsonVariant v = doc2.to(); + + // Should copy the doc + v.set(doc1); + doc1.clear(); + + std::string json; + serializeJson(doc2, json); + REQUIRE(json == "{\"hello\":\"world\"}"); +}