mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 08:42:39 +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; | ||||
| > 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` | ||||
| > | ||||
|   | ||||
| @@ -11,23 +11,65 @@ TEST_CASE("Deprecated features") { | ||||
|   StaticJsonDocument<256> doc; | ||||
|   const char* s = "hello"; | ||||
|   doc["s"] = s; | ||||
|   doc["c"] = 42; | ||||
|   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*>()") { | ||||
|     JsonVariant v = doc["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*>()") { | ||||
|     JsonVariantConst v = doc["s"]; | ||||
|     REQUIRE(v.as<char*>() == s); | ||||
|   } | ||||
|  | ||||
|   SECTION("JsonVariantConst::as<char>()") { | ||||
|     JsonVariantConst v = doc["c"]; | ||||
|     REQUIRE(v.as<char>() == '*'); | ||||
|   } | ||||
|  | ||||
|   SECTION("MemberProxy::as<char*>()") { | ||||
|     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*>()") { | ||||
|     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); | ||||
|   } | ||||
|  | ||||
|   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> | ||||
|   FORCE_INLINE bool set(T *value) const { | ||||
|     return Converter<T *>::toJson(value, *this); | ||||
|   } | ||||
|  | ||||
|   template <typename T> | ||||
|   FORCE_INLINE typename enable_if<!is_same<T, char *>::value, T>::type as() | ||||
|       const { | ||||
|   FORCE_INLINE | ||||
|       typename enable_if<!is_same<T, char *>::value && !is_same<T, char>::value, | ||||
|                          T>::type | ||||
|       as() const { | ||||
|     return Converter<T>::fromJson(*this); | ||||
|   } | ||||
|  | ||||
| @@ -106,6 +114,14 @@ class VariantRef : public VariantRefBase<VariantData>, | ||||
|     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> | ||||
|   FORCE_INLINE bool is() const { | ||||
|     return Converter<T>::checkJson(*this); | ||||
| @@ -113,7 +129,7 @@ class VariantRef : public VariantRefBase<VariantData>, | ||||
|  | ||||
|   template <typename T> | ||||
|   FORCE_INLINE operator T() const { | ||||
|     return Converter<T>::fromJson(*this); | ||||
|     return as<T>(); | ||||
|   } | ||||
|  | ||||
|   template <typename TVisitor> | ||||
| @@ -212,8 +228,10 @@ class VariantConstRef : public VariantRefBase<const VariantData>, | ||||
|   } | ||||
|  | ||||
|   template <typename T> | ||||
|   FORCE_INLINE typename enable_if<!is_same<T, char *>::value, T>::type as() | ||||
|       const { | ||||
|   FORCE_INLINE | ||||
|       typename enable_if<!is_same<T, char *>::value && !is_same<T, char>::value, | ||||
|                          T>::type | ||||
|       as() const { | ||||
|     return Converter<T>::fromJson(*this); | ||||
|   } | ||||
|  | ||||
| @@ -224,6 +242,14 @@ class VariantConstRef : public VariantRefBase<const VariantData>, | ||||
|     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> | ||||
|   FORCE_INLINE bool is() const { | ||||
|     return Converter<T>::checkJson(*this); | ||||
| @@ -231,7 +257,7 @@ class VariantConstRef : public VariantRefBase<const VariantData>, | ||||
|  | ||||
|   template <typename T> | ||||
|   FORCE_INLINE operator T() const { | ||||
|     return Converter<T>::fromJson(*this); | ||||
|     return as<T>(); | ||||
|   } | ||||
|  | ||||
|   FORCE_INLINE VariantConstRef getElement(size_t) const; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user