mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Added a deprecation warning for as<char>() and set(char)
This commit is contained in:
		| @@ -43,6 +43,7 @@ HEAD | |||||||
| > int8_t age; | > int8_t age; | ||||||
| > doc["age"] = age;  // OK | > doc["age"] = age;  // OK | ||||||
| > ``` | > ``` | ||||||
|  | > A deprecation warning with the message "Support for `char` is deprecated, use `int8_t` or `uint8_t` instead" was added to allow a smooth transition. | ||||||
| > | > | ||||||
| > #### `as<T>()` always returns `T` | > #### `as<T>()` always returns `T` | ||||||
| > | > | ||||||
|   | |||||||
| @@ -11,23 +11,65 @@ TEST_CASE("Deprecated features") { | |||||||
|   StaticJsonDocument<256> doc; |   StaticJsonDocument<256> doc; | ||||||
|   const char* s = "hello"; |   const char* s = "hello"; | ||||||
|   doc["s"] = s; |   doc["s"] = s; | ||||||
|  |   doc["c"] = 42; | ||||||
|   doc["a"].add(s); |   doc["a"].add(s); | ||||||
|  |   doc["a"].add(42); | ||||||
|  |  | ||||||
|  |   SECTION("JsonVariant::add(char)") { | ||||||
|  |     JsonVariant v = doc.to<JsonVariant>(); | ||||||
|  |     v.add('*'); | ||||||
|  |     REQUIRE(v[0] == 42); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   SECTION("JsonVariant::as<char*>()") { |   SECTION("JsonVariant::as<char*>()") { | ||||||
|     JsonVariant v = doc["s"]; |     JsonVariant v = doc["s"]; | ||||||
|     REQUIRE(v.as<char*>() == s); |     REQUIRE(v.as<char*>() == s); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   SECTION("JsonVariant::as<char>()") { | ||||||
|  |     JsonVariant v = doc["c"]; | ||||||
|  |     REQUIRE(v.as<char>() == '*'); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   SECTION("JsonVariant::set(char)") { | ||||||
|  |     JsonVariant v = doc.to<JsonVariant>(); | ||||||
|  |     v.set('*'); | ||||||
|  |     REQUIRE(v.as<unsigned char>() == 42); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   SECTION("JsonVariantConst::as<char*>()") { |   SECTION("JsonVariantConst::as<char*>()") { | ||||||
|     JsonVariantConst v = doc["s"]; |     JsonVariantConst v = doc["s"]; | ||||||
|     REQUIRE(v.as<char*>() == s); |     REQUIRE(v.as<char*>() == s); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   SECTION("JsonVariantConst::as<char>()") { | ||||||
|  |     JsonVariantConst v = doc["c"]; | ||||||
|  |     REQUIRE(v.as<char>() == '*'); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   SECTION("MemberProxy::as<char*>()") { |   SECTION("MemberProxy::as<char*>()") { | ||||||
|     REQUIRE(doc["s"].as<char*>() == s); |     REQUIRE(doc["s"].as<char*>() == s); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   SECTION("MemberProxy::as<char>()") { | ||||||
|  |     REQUIRE(doc["c"].as<char>() == '*'); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   SECTION("MemberProxy::as<char>()") { | ||||||
|  |     doc["x"].set('*'); | ||||||
|  |     REQUIRE(doc["x"] == 42); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   SECTION("ElementProxy::as<char*>()") { |   SECTION("ElementProxy::as<char*>()") { | ||||||
|     REQUIRE(doc["a"][0].as<char*>() == s); |     REQUIRE(doc["a"][0].as<char*>() == s); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   SECTION("ElementProxy::as<char>()") { | ||||||
|  |     REQUIRE(doc["a"][1].as<char>() == '*'); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   SECTION("ElementProxy::as<char>()") { | ||||||
|  |     doc["a"][0].set('*'); | ||||||
|  |     REQUIRE(doc["a"][0] == 42); | ||||||
|  |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -88,14 +88,22 @@ class VariantRef : public VariantRefBase<VariantData>, | |||||||
|     return Converter<T>::toJson(value, *this); |     return Converter<T>::toJson(value, *this); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   FORCE_INLINE bool ARDUINOJSON_DEPRECATED( | ||||||
|  |       "Support for char is deprecated, use int8_t or uint8_t instead") | ||||||
|  |       set(char value) const { | ||||||
|  |     return set<signed char>(value); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   template <typename T> |   template <typename T> | ||||||
|   FORCE_INLINE bool set(T *value) const { |   FORCE_INLINE bool set(T *value) const { | ||||||
|     return Converter<T *>::toJson(value, *this); |     return Converter<T *>::toJson(value, *this); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   template <typename T> |   template <typename T> | ||||||
|   FORCE_INLINE typename enable_if<!is_same<T, char *>::value, T>::type as() |   FORCE_INLINE | ||||||
|       const { |       typename enable_if<!is_same<T, char *>::value && !is_same<T, char>::value, | ||||||
|  |                          T>::type | ||||||
|  |       as() const { | ||||||
|     return Converter<T>::fromJson(*this); |     return Converter<T>::fromJson(*this); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -106,6 +114,14 @@ class VariantRef : public VariantRefBase<VariantData>, | |||||||
|     return as<const char *>(); |     return as<const char *>(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   template <typename T> | ||||||
|  |   FORCE_INLINE typename enable_if<is_same<T, char>::value, char>::type | ||||||
|  |   ARDUINOJSON_DEPRECATED( | ||||||
|  |       "Support for char is deprecated, use int8_t or uint8_t instead") | ||||||
|  |       as() const { | ||||||
|  |     return as<signed char>(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   template <typename T> |   template <typename T> | ||||||
|   FORCE_INLINE bool is() const { |   FORCE_INLINE bool is() const { | ||||||
|     return Converter<T>::checkJson(*this); |     return Converter<T>::checkJson(*this); | ||||||
| @@ -113,7 +129,7 @@ class VariantRef : public VariantRefBase<VariantData>, | |||||||
|  |  | ||||||
|   template <typename T> |   template <typename T> | ||||||
|   FORCE_INLINE operator T() const { |   FORCE_INLINE operator T() const { | ||||||
|     return Converter<T>::fromJson(*this); |     return as<T>(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   template <typename TVisitor> |   template <typename TVisitor> | ||||||
| @@ -212,8 +228,10 @@ class VariantConstRef : public VariantRefBase<const VariantData>, | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   template <typename T> |   template <typename T> | ||||||
|   FORCE_INLINE typename enable_if<!is_same<T, char *>::value, T>::type as() |   FORCE_INLINE | ||||||
|       const { |       typename enable_if<!is_same<T, char *>::value && !is_same<T, char>::value, | ||||||
|  |                          T>::type | ||||||
|  |       as() const { | ||||||
|     return Converter<T>::fromJson(*this); |     return Converter<T>::fromJson(*this); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -224,6 +242,14 @@ class VariantConstRef : public VariantRefBase<const VariantData>, | |||||||
|     return as<const char *>(); |     return as<const char *>(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   template <typename T> | ||||||
|  |   FORCE_INLINE typename enable_if<is_same<T, char>::value, char>::type | ||||||
|  |   ARDUINOJSON_DEPRECATED( | ||||||
|  |       "Support for char is deprecated, use int8_t or uint8_t instead") | ||||||
|  |       as() const { | ||||||
|  |     return as<signed char>(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   template <typename T> |   template <typename T> | ||||||
|   FORCE_INLINE bool is() const { |   FORCE_INLINE bool is() const { | ||||||
|     return Converter<T>::checkJson(*this); |     return Converter<T>::checkJson(*this); | ||||||
| @@ -231,7 +257,7 @@ class VariantConstRef : public VariantRefBase<const VariantData>, | |||||||
|  |  | ||||||
|   template <typename T> |   template <typename T> | ||||||
|   FORCE_INLINE operator T() const { |   FORCE_INLINE operator T() const { | ||||||
|     return Converter<T>::fromJson(*this); |     return as<T>(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   FORCE_INLINE VariantConstRef getElement(size_t) const; |   FORCE_INLINE VariantConstRef getElement(size_t) const; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user