Added a deprecation warning for is<char>() and is<char*>()

This commit is contained in:
Benoit Blanchon
2021-05-05 15:43:02 +02:00
parent 6aeefda3b6
commit c7c0b729c1
2 changed files with 78 additions and 2 deletions

View File

@ -31,6 +31,16 @@ TEST_CASE("Deprecated features") {
REQUIRE(v.as<char>() == '*'); REQUIRE(v.as<char>() == '*');
} }
SECTION("JsonVariant::is<char*>()") {
JsonVariant v = doc["s"];
REQUIRE(v.is<char*>() == true);
}
SECTION("JsonVariant::is<char>()") {
JsonVariant v = doc["c"];
REQUIRE(v.is<char>() == true);
}
SECTION("JsonVariant::set(char)") { SECTION("JsonVariant::set(char)") {
JsonVariant v = doc.to<JsonVariant>(); JsonVariant v = doc.to<JsonVariant>();
v.set('*'); v.set('*');
@ -47,6 +57,16 @@ TEST_CASE("Deprecated features") {
REQUIRE(v.as<char>() == '*'); REQUIRE(v.as<char>() == '*');
} }
SECTION("JsonVariantConst::is<char*>()") {
JsonVariantConst v = doc["s"];
REQUIRE(v.is<char*>() == true);
}
SECTION("JsonVariantConst::is<char>()") {
JsonVariantConst v = doc["c"];
REQUIRE(v.is<char>() == true);
}
SECTION("MemberProxy::as<char*>()") { SECTION("MemberProxy::as<char*>()") {
REQUIRE(doc["s"].as<char*>() == s); REQUIRE(doc["s"].as<char*>() == s);
} }
@ -60,6 +80,16 @@ TEST_CASE("Deprecated features") {
REQUIRE(doc["x"] == 42); REQUIRE(doc["x"] == 42);
} }
SECTION("MemberProxy::is<char*>()") {
REQUIRE(doc["s"].is<char*>() == true);
REQUIRE(doc["c"].is<char*>() == false);
}
SECTION("MemberProxy::is<char>()") {
REQUIRE(doc["c"].is<char>() == true);
REQUIRE(doc["s"].is<char>() == false);
}
SECTION("ElementProxy::as<char*>()") { SECTION("ElementProxy::as<char*>()") {
REQUIRE(doc["a"][0].as<char*>() == s); REQUIRE(doc["a"][0].as<char*>() == s);
} }
@ -72,4 +102,14 @@ TEST_CASE("Deprecated features") {
doc["a"][0].set('*'); doc["a"][0].set('*');
REQUIRE(doc["a"][0] == 42); REQUIRE(doc["a"][0] == 42);
} }
SECTION("ElementProxy::is<char*>()") {
REQUIRE(doc["a"][0].is<char*>() == true);
REQUIRE(doc["a"][1].is<char*>() == false);
}
SECTION("ElementProxy::is<char>()") {
REQUIRE(doc["a"][1].is<char>() == true);
REQUIRE(doc["a"][0].is<char>() == false);
}
} }

View File

@ -123,10 +123,28 @@ class VariantRef : public VariantRefBase<VariantData>,
} }
template <typename T> template <typename T>
FORCE_INLINE bool is() const { FORCE_INLINE
typename enable_if<!is_same<T, char *>::value && !is_same<T, char>::value,
bool>::type
is() const {
return Converter<T>::checkJson(*this); return Converter<T>::checkJson(*this);
} }
template <typename T>
FORCE_INLINE typename enable_if<is_same<T, char *>::value, bool>::type
ARDUINOJSON_DEPRECATED("Replace is<char*>() with is<const char*>()")
is() const {
return is<const char *>();
}
template <typename T>
FORCE_INLINE typename enable_if<is_same<T, char>::value, bool>::type
ARDUINOJSON_DEPRECATED(
"Support for char is deprecated, use int8_t or uint8_t instead")
is() const {
return is<signed char>();
}
template <typename T> template <typename T>
FORCE_INLINE operator T() const { FORCE_INLINE operator T() const {
return as<T>(); return as<T>();
@ -251,10 +269,28 @@ class VariantConstRef : public VariantRefBase<const VariantData>,
} }
template <typename T> template <typename T>
FORCE_INLINE bool is() const { FORCE_INLINE
typename enable_if<!is_same<T, char *>::value && !is_same<T, char>::value,
bool>::type
is() const {
return Converter<T>::checkJson(*this); return Converter<T>::checkJson(*this);
} }
template <typename T>
FORCE_INLINE typename enable_if<is_same<T, char *>::value, bool>::type
ARDUINOJSON_DEPRECATED("Replace is<char*>() with is<const char*>()")
is() const {
return is<const char *>();
}
template <typename T>
FORCE_INLINE typename enable_if<is_same<T, char>::value, bool>::type
ARDUINOJSON_DEPRECATED(
"Support for char is deprecated, use int8_t or uint8_t instead")
is() const {
return is<signed char>();
}
template <typename T> template <typename T>
FORCE_INLINE operator T() const { FORCE_INLINE operator T() const {
return as<T>(); return as<T>();