From b1eb273d5b4f9392f9124723c087b9d35611ce23 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 23 Feb 2021 08:33:28 +0100 Subject: [PATCH] Added JsonVariant::is() (issue #1412) --- CHANGELOG.md | 1 + extras/tests/JsonVariant/is.cpp | 8 ++++++++ src/ArduinoJson/Variant/VariantRef.hpp | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e42b15bf..4a45e689 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ HEAD * `deserializeJson()` leaves `\uXXXX` unchanged instead of returning `NotSupported` * `deserializeMsgPack()` inserts `null` instead of returning `NotSupported` * Removed `DeserializationError::NotSupported` +* Added `JsonVariant::is()` (issue #1412) > ### BREAKING CHANGES > diff --git a/extras/tests/JsonVariant/is.cpp b/extras/tests/JsonVariant/is.cpp index 7e94ad20..c7383455 100644 --- a/extras/tests/JsonVariant/is.cpp +++ b/extras/tests/JsonVariant/is.cpp @@ -97,7 +97,9 @@ TEST_CASE("JsonVariant::is()") { variant.to(); CHECK(variant.is() == true); + CHECK(variant.is() == true); CHECK(variant.is() == false); + CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); @@ -109,7 +111,9 @@ TEST_CASE("JsonVariant::is()") { variant.to(); CHECK(variant.is() == true); + CHECK(variant.is() == true); CHECK(variant.is() == false); + CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); CHECK(variant.is() == false); @@ -209,7 +213,9 @@ TEST_CASE("JsonVariantConst::is()") { variant.to(); CHECK(cvariant.is() == true); + CHECK(cvariant.is() == true); CHECK(cvariant.is() == false); + CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); @@ -221,7 +227,9 @@ TEST_CASE("JsonVariantConst::is()") { variant.to(); CHECK(cvariant.is() == true); + CHECK(cvariant.is() == true); CHECK(cvariant.is() == false); + CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); CHECK(cvariant.is() == false); diff --git a/src/ArduinoJson/Variant/VariantRef.hpp b/src/ArduinoJson/Variant/VariantRef.hpp index 68a37d44..e2d6e7dc 100644 --- a/src/ArduinoJson/Variant/VariantRef.hpp +++ b/src/ArduinoJson/Variant/VariantRef.hpp @@ -85,6 +85,15 @@ class VariantRefBase : public VariantTag { return variantIsArray(_data); } // + // bool is const; + // bool is const; + template + FORCE_INLINE typename enable_if< + is_same::type, ArrayConstRef>::value, bool>::type + is() const { + return variantIsArray(_data); + } + // // bool is const; // bool is const; template @@ -93,6 +102,16 @@ class VariantRefBase : public VariantTag { is() const { return variantIsObject(_data); } + // + // bool is const; + // bool is const; + template + FORCE_INLINE typename enable_if< + is_same::type, ObjectConstRef>::value, + bool>::type + is() const { + return variantIsObject(_data); + } #if ARDUINOJSON_HAS_NULLPTR // // bool is const;