Added JsonVariant::is<JsonVariant/JsonVariantConst>() (issue #1412)

This commit is contained in:
Benoit Blanchon
2021-02-23 08:41:24 +01:00
parent 05498aa178
commit 744d61f6fd
3 changed files with 21 additions and 1 deletions

View File

@ -9,7 +9,7 @@ HEAD
* `deserializeMsgPack()` inserts `null` instead of returning `NotSupported`
* Removed `DeserializationError::NotSupported`
* Added `JsonVariant::is<JsonArrayConst/JsonObjectConst>()` (issue #1412)
* Added `JsonVariant::is<JsonVariant>()` (issue #1412)
* Added `JsonVariant::is<JsonVariant/JsonVariantConst>()` (issue #1412)
> ### BREAKING CHANGES
>

View File

@ -17,6 +17,7 @@ TEST_CASE("JsonVariant::is<T>()") {
CHECK(variant.is<JsonObject>() == false);
CHECK(variant.is<JsonArray>() == false);
CHECK(variant.is<JsonVariant>() == false);
CHECK(variant.is<JsonVariantConst>() == false);
CHECK(variant.is<bool>() == false);
CHECK(variant.is<char *>() == false);
CHECK(variant.is<int>() == false);
@ -27,6 +28,7 @@ TEST_CASE("JsonVariant::is<T>()") {
SECTION("null") {
CHECK(variant.is<JsonVariant>() == true);
CHECK(variant.is<JsonVariantConst>() == true);
CHECK(variant.is<JsonObject>() == false);
CHECK(variant.is<JsonArray>() == false);
CHECK(variant.is<bool>() == false);
@ -42,6 +44,7 @@ TEST_CASE("JsonVariant::is<T>()") {
CHECK(variant.is<bool>() == true);
CHECK(variant.is<JsonVariant>() == true);
CHECK(variant.is<JsonVariantConst>() == true);
CHECK(variant.is<JsonObject>() == false);
CHECK(variant.is<JsonArray>() == false);
CHECK(variant.is<char *>() == false);
@ -56,6 +59,7 @@ TEST_CASE("JsonVariant::is<T>()") {
CHECK(variant.is<bool>() == true);
CHECK(variant.is<JsonVariant>() == true);
CHECK(variant.is<JsonVariantConst>() == true);
CHECK(variant.is<JsonObject>() == false);
CHECK(variant.is<JsonArray>() == false);
CHECK(variant.is<char *>() == false);
@ -75,6 +79,7 @@ TEST_CASE("JsonVariant::is<T>()") {
CHECK(variant.is<float>() == true);
CHECK(variant.is<MYENUM2>() == true);
CHECK(variant.is<JsonVariant>() == true);
CHECK(variant.is<JsonVariantConst>() == true);
CHECK(variant.is<bool>() == false);
CHECK(variant.is<JsonObject>() == false);
CHECK(variant.is<JsonArray>() == false);
@ -88,6 +93,7 @@ TEST_CASE("JsonVariant::is<T>()") {
CHECK(variant.is<double>() == true);
CHECK(variant.is<float>() == true);
CHECK(variant.is<JsonVariant>() == true);
CHECK(variant.is<JsonVariantConst>() == true);
CHECK(variant.is<bool>() == false);
CHECK(variant.is<JsonObject>() == false);
CHECK(variant.is<JsonArray>() == false);
@ -104,6 +110,7 @@ TEST_CASE("JsonVariant::is<T>()") {
CHECK(variant.is<const char *>() == true);
CHECK(variant.is<std::string>() == true);
CHECK(variant.is<JsonVariant>() == true);
CHECK(variant.is<JsonVariantConst>() == true);
CHECK(variant.is<double>() == false);
CHECK(variant.is<float>() == false);
CHECK(variant.is<bool>() == false);
@ -119,6 +126,7 @@ TEST_CASE("JsonVariant::is<T>()") {
CHECK(variant.is<JsonArray>() == true);
CHECK(variant.is<JsonArrayConst>() == true);
CHECK(variant.is<JsonVariant>() == true);
CHECK(variant.is<JsonVariantConst>() == true);
CHECK(variant.is<JsonObject>() == false);
CHECK(variant.is<JsonObjectConst>() == false);
CHECK(variant.is<int>() == false);
@ -134,6 +142,7 @@ TEST_CASE("JsonVariant::is<T>()") {
CHECK(variant.is<JsonObject>() == true);
CHECK(variant.is<JsonObjectConst>() == true);
CHECK(variant.is<JsonVariant>() == true);
CHECK(variant.is<JsonVariantConst>() == true);
CHECK(variant.is<JsonArray>() == false);
CHECK(variant.is<JsonArrayConst>() == false);
CHECK(variant.is<int>() == false);
@ -142,6 +151,7 @@ TEST_CASE("JsonVariant::is<T>()") {
CHECK(variant.is<char *>() == false);
CHECK(variant.is<MYENUM2>() == false);
CHECK(variant.is<JsonVariant>() == true);
CHECK(variant.is<JsonVariantConst>() == true);
}
}

View File

@ -121,6 +121,16 @@ class VariantRefBase : public VariantTag {
is() const {
return !!_data;
}
//
// bool is<VariantConstRef> const;
// bool is<const VariantConstRef> const;
template <typename T>
FORCE_INLINE typename enable_if<
is_same<typename remove_const<T>::type, VariantConstRef>::value,
bool>::type
is() const {
return !!_data;
}
#if ARDUINOJSON_HAS_NULLPTR
//
// bool is<nullptr_t> const;