Skip to content

Commit c7c0b72

Browse files
committed
Added a deprecation warning for is<char>() and is<char*>()
1 parent 6aeefda commit c7c0b72

File tree

2 files changed

+78
-2
lines changed

2 files changed

+78
-2
lines changed

extras/tests/Misc/deprecated.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ TEST_CASE("Deprecated features") {
3131
REQUIRE(v.as<char>() == '*');
3232
}
3333

34+
SECTION("JsonVariant::is<char*>()") {
35+
JsonVariant v = doc["s"];
36+
REQUIRE(v.is<char*>() == true);
37+
}
38+
39+
SECTION("JsonVariant::is<char>()") {
40+
JsonVariant v = doc["c"];
41+
REQUIRE(v.is<char>() == true);
42+
}
43+
3444
SECTION("JsonVariant::set(char)") {
3545
JsonVariant v = doc.to<JsonVariant>();
3646
v.set('*');
@@ -47,6 +57,16 @@ TEST_CASE("Deprecated features") {
4757
REQUIRE(v.as<char>() == '*');
4858
}
4959

60+
SECTION("JsonVariantConst::is<char*>()") {
61+
JsonVariantConst v = doc["s"];
62+
REQUIRE(v.is<char*>() == true);
63+
}
64+
65+
SECTION("JsonVariantConst::is<char>()") {
66+
JsonVariantConst v = doc["c"];
67+
REQUIRE(v.is<char>() == true);
68+
}
69+
5070
SECTION("MemberProxy::as<char*>()") {
5171
REQUIRE(doc["s"].as<char*>() == s);
5272
}
@@ -60,6 +80,16 @@ TEST_CASE("Deprecated features") {
6080
REQUIRE(doc["x"] == 42);
6181
}
6282

83+
SECTION("MemberProxy::is<char*>()") {
84+
REQUIRE(doc["s"].is<char*>() == true);
85+
REQUIRE(doc["c"].is<char*>() == false);
86+
}
87+
88+
SECTION("MemberProxy::is<char>()") {
89+
REQUIRE(doc["c"].is<char>() == true);
90+
REQUIRE(doc["s"].is<char>() == false);
91+
}
92+
6393
SECTION("ElementProxy::as<char*>()") {
6494
REQUIRE(doc["a"][0].as<char*>() == s);
6595
}
@@ -72,4 +102,14 @@ TEST_CASE("Deprecated features") {
72102
doc["a"][0].set('*');
73103
REQUIRE(doc["a"][0] == 42);
74104
}
105+
106+
SECTION("ElementProxy::is<char*>()") {
107+
REQUIRE(doc["a"][0].is<char*>() == true);
108+
REQUIRE(doc["a"][1].is<char*>() == false);
109+
}
110+
111+
SECTION("ElementProxy::is<char>()") {
112+
REQUIRE(doc["a"][1].is<char>() == true);
113+
REQUIRE(doc["a"][0].is<char>() == false);
114+
}
75115
}

src/ArduinoJson/Variant/VariantRef.hpp

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,10 +123,28 @@ class VariantRef : public VariantRefBase<VariantData>,
123123
}
124124

125125
template <typename T>
126-
FORCE_INLINE bool is() const {
126+
FORCE_INLINE
127+
typename enable_if<!is_same<T, char *>::value && !is_same<T, char>::value,
128+
bool>::type
129+
is() const {
127130
return Converter<T>::checkJson(*this);
128131
}
129132

133+
template <typename T>
134+
FORCE_INLINE typename enable_if<is_same<T, char *>::value, bool>::type
135+
ARDUINOJSON_DEPRECATED("Replace is<char*>() with is<const char*>()")
136+
is() const {
137+
return is<const char *>();
138+
}
139+
140+
template <typename T>
141+
FORCE_INLINE typename enable_if<is_same<T, char>::value, bool>::type
142+
ARDUINOJSON_DEPRECATED(
143+
"Support for char is deprecated, use int8_t or uint8_t instead")
144+
is() const {
145+
return is<signed char>();
146+
}
147+
130148
template <typename T>
131149
FORCE_INLINE operator T() const {
132150
return as<T>();
@@ -251,10 +269,28 @@ class VariantConstRef : public VariantRefBase<const VariantData>,
251269
}
252270

253271
template <typename T>
254-
FORCE_INLINE bool is() const {
272+
FORCE_INLINE
273+
typename enable_if<!is_same<T, char *>::value && !is_same<T, char>::value,
274+
bool>::type
275+
is() const {
255276
return Converter<T>::checkJson(*this);
256277
}
257278

279+
template <typename T>
280+
FORCE_INLINE typename enable_if<is_same<T, char *>::value, bool>::type
281+
ARDUINOJSON_DEPRECATED("Replace is<char*>() with is<const char*>()")
282+
is() const {
283+
return is<const char *>();
284+
}
285+
286+
template <typename T>
287+
FORCE_INLINE typename enable_if<is_same<T, char>::value, bool>::type
288+
ARDUINOJSON_DEPRECATED(
289+
"Support for char is deprecated, use int8_t or uint8_t instead")
290+
is() const {
291+
return is<signed char>();
292+
}
293+
258294
template <typename T>
259295
FORCE_INLINE operator T() const {
260296
return as<T>();

0 commit comments

Comments
 (0)