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\"}"); +}