From aeb30ef3070a7a507b413a467c8f516be19d6005 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Wed, 15 May 2024 09:33:30 +0200 Subject: [PATCH] Support `ElementProxy` and `MemberProxy` in `JsonDocument`'s constructor --- CHANGELOG.md | 4 ++++ extras/tests/JsonDocument/constructor.cpp | 18 ++++++++++++++++++ src/ArduinoJson/Document/JsonDocument.hpp | 16 +++++++--------- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a5273c70..8fa4d061 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,16 @@ ArduinoJson: change log ======================= +HEAD +---- + * Add `ARDUINOJSON_STRING_LENGTH_SIZE` to the namespace name * Add MsgPack bin8/bin16/bin32 support (PR #2078 by @Sanae6) * Make string support even more generic (PR #2084 by @d-a-v) * Optimize `deserializeMsgPack()` * Allow using a `JsonVariant` as a key or index (issue #2080) Note: works only for reading, not for writing +* Support `ElementProxy` and `MemberProxy` in `JsonDocument`'s constructor v7.0.4 (2024-03-12) ------ diff --git a/extras/tests/JsonDocument/constructor.cpp b/extras/tests/JsonDocument/constructor.cpp index 007bacfa..fb99c509 100644 --- a/extras/tests/JsonDocument/constructor.cpp +++ b/extras/tests/JsonDocument/constructor.cpp @@ -126,4 +126,22 @@ TEST_CASE("JsonDocument constructor") { REQUIRE(doc2.as() == "hello"); } + + SECTION("JsonDocument(ElementProxy)") { + JsonDocument doc1; + deserializeJson(doc1, "[\"hello\",\"world\"]"); + + JsonDocument doc2(doc1[1]); + + REQUIRE(doc2.as() == "world"); + } + + SECTION("JsonDocument(MemberProxy)") { + JsonDocument doc1; + deserializeJson(doc1, "{\"hello\":\"world\"}"); + + JsonDocument doc2(doc1["hello"]); + + REQUIRE(doc2.as() == "world"); + } } diff --git a/src/ArduinoJson/Document/JsonDocument.hpp b/src/ArduinoJson/Document/JsonDocument.hpp index 979a1850..28eded6c 100644 --- a/src/ArduinoJson/Document/JsonDocument.hpp +++ b/src/ArduinoJson/Document/JsonDocument.hpp @@ -37,15 +37,13 @@ class JsonDocument : public detail::VariantOperators { // Construct from variant, array, or object template - JsonDocument(const T& src, - Allocator* alloc = detail::DefaultAllocator::instance(), - typename detail::enable_if< - detail::is_same::value || - detail::is_same::value || - detail::is_same::value || - detail::is_same::value || - detail::is_same::value || - detail::is_same::value>::type* = 0) + JsonDocument( + const T& src, Allocator* alloc = detail::DefaultAllocator::instance(), + typename detail::enable_if< + detail::IsVariant::value || detail::is_same::value || + detail::is_same::value || + detail::is_same::value || + detail::is_same::value>::type* = 0) : JsonDocument(alloc) { set(src); }