From c7c0b729c176eebcead3a024212635ac4c201899 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Wed, 5 May 2021 15:43:02 +0200 Subject: [PATCH] Added a deprecation warning for is() and is() --- extras/tests/Misc/deprecated.cpp | 40 ++++++++++++++++++++++++++ src/ArduinoJson/Variant/VariantRef.hpp | 40 ++++++++++++++++++++++++-- 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/extras/tests/Misc/deprecated.cpp b/extras/tests/Misc/deprecated.cpp index 8df4284f..591ada87 100644 --- a/extras/tests/Misc/deprecated.cpp +++ b/extras/tests/Misc/deprecated.cpp @@ -31,6 +31,16 @@ TEST_CASE("Deprecated features") { REQUIRE(v.as() == '*'); } + SECTION("JsonVariant::is()") { + JsonVariant v = doc["s"]; + REQUIRE(v.is() == true); + } + + SECTION("JsonVariant::is()") { + JsonVariant v = doc["c"]; + REQUIRE(v.is() == true); + } + SECTION("JsonVariant::set(char)") { JsonVariant v = doc.to(); v.set('*'); @@ -47,6 +57,16 @@ TEST_CASE("Deprecated features") { REQUIRE(v.as() == '*'); } + SECTION("JsonVariantConst::is()") { + JsonVariantConst v = doc["s"]; + REQUIRE(v.is() == true); + } + + SECTION("JsonVariantConst::is()") { + JsonVariantConst v = doc["c"]; + REQUIRE(v.is() == true); + } + SECTION("MemberProxy::as()") { REQUIRE(doc["s"].as() == s); } @@ -60,6 +80,16 @@ TEST_CASE("Deprecated features") { REQUIRE(doc["x"] == 42); } + SECTION("MemberProxy::is()") { + REQUIRE(doc["s"].is() == true); + REQUIRE(doc["c"].is() == false); + } + + SECTION("MemberProxy::is()") { + REQUIRE(doc["c"].is() == true); + REQUIRE(doc["s"].is() == false); + } + SECTION("ElementProxy::as()") { REQUIRE(doc["a"][0].as() == s); } @@ -72,4 +102,14 @@ TEST_CASE("Deprecated features") { doc["a"][0].set('*'); REQUIRE(doc["a"][0] == 42); } + + SECTION("ElementProxy::is()") { + REQUIRE(doc["a"][0].is() == true); + REQUIRE(doc["a"][1].is() == false); + } + + SECTION("ElementProxy::is()") { + REQUIRE(doc["a"][1].is() == true); + REQUIRE(doc["a"][0].is() == false); + } } diff --git a/src/ArduinoJson/Variant/VariantRef.hpp b/src/ArduinoJson/Variant/VariantRef.hpp index 01e57316..8d4c4108 100644 --- a/src/ArduinoJson/Variant/VariantRef.hpp +++ b/src/ArduinoJson/Variant/VariantRef.hpp @@ -123,10 +123,28 @@ class VariantRef : public VariantRefBase, } template - FORCE_INLINE bool is() const { + FORCE_INLINE + typename enable_if::value && !is_same::value, + bool>::type + is() const { return Converter::checkJson(*this); } + template + FORCE_INLINE typename enable_if::value, bool>::type + ARDUINOJSON_DEPRECATED("Replace is() with is()") + is() const { + return is(); + } + + template + FORCE_INLINE typename enable_if::value, bool>::type + ARDUINOJSON_DEPRECATED( + "Support for char is deprecated, use int8_t or uint8_t instead") + is() const { + return is(); + } + template FORCE_INLINE operator T() const { return as(); @@ -251,10 +269,28 @@ class VariantConstRef : public VariantRefBase, } template - FORCE_INLINE bool is() const { + FORCE_INLINE + typename enable_if::value && !is_same::value, + bool>::type + is() const { return Converter::checkJson(*this); } + template + FORCE_INLINE typename enable_if::value, bool>::type + ARDUINOJSON_DEPRECATED("Replace is() with is()") + is() const { + return is(); + } + + template + FORCE_INLINE typename enable_if::value, bool>::type + ARDUINOJSON_DEPRECATED( + "Support for char is deprecated, use int8_t or uint8_t instead") + is() const { + return is(); + } + template FORCE_INLINE operator T() const { return as();