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;