Remove support for naked char (was deprecated since 6.18.0)

This commit is contained in:
Benoit Blanchon
2022-12-26 11:02:34 +01:00
parent cb9c90f2d0
commit 191fc5dff4
7 changed files with 1 additions and 220 deletions

View File

@ -15,6 +15,7 @@ HEAD
* Remove undocumented `JsonArrayIterator::internal()` and `JsonObjectIterator::internal()` * Remove undocumented `JsonArrayIterator::internal()` and `JsonObjectIterator::internal()`
* Rename things in `ARDUINOJSON_NAMESPACE` to match the public names * Rename things in `ARDUINOJSON_NAMESPACE` to match the public names
* Add documentation to most public symbols * Add documentation to most public symbols
* Remove support for naked `char` (was deprecated since 6.18.0)
> ### BREAKING CHANGES > ### BREAKING CHANGES
> >

View File

@ -5,7 +5,6 @@
add_executable(MiscTests add_executable(MiscTests
arithmeticCompare.cpp arithmeticCompare.cpp
conflicts.cpp conflicts.cpp
deprecated.cpp
FloatParts.cpp FloatParts.cpp
JsonString.cpp JsonString.cpp
NoArduinoHeader.cpp NoArduinoHeader.cpp

View File

@ -1,115 +0,0 @@
// ArduinoJson - https://arduinojson.org
// Copyright © 2014-2022, Benoit BLANCHON
// MIT License
#define ARDUINOJSON_DEPRECATED(msg) // nothing
#include <ArduinoJson.h>
#include <catch.hpp>
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::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)") {
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("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*>()") {
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("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*>()") {
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);
}
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

@ -9,32 +9,16 @@
# define FORCE_INLINE // __forceinline causes C4714 when returning std::string # define FORCE_INLINE // __forceinline causes C4714 when returning std::string
# define NO_INLINE __declspec(noinline) # define NO_INLINE __declspec(noinline)
# ifndef ARDUINOJSON_DEPRECATED
# define ARDUINOJSON_DEPRECATED(msg) __declspec(deprecated(msg))
# endif
#elif defined(__GNUC__) // GCC or Clang #elif defined(__GNUC__) // GCC or Clang
# define FORCE_INLINE __attribute__((always_inline)) # define FORCE_INLINE __attribute__((always_inline))
# define NO_INLINE __attribute__((noinline)) # define NO_INLINE __attribute__((noinline))
# ifndef ARDUINOJSON_DEPRECATED
# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
# define ARDUINOJSON_DEPRECATED(msg) __attribute__((deprecated(msg)))
# else
# define ARDUINOJSON_DEPRECATED(msg) __attribute__((deprecated))
# endif
# endif
#else // Other compilers #else // Other compilers
# define FORCE_INLINE # define FORCE_INLINE
# define NO_INLINE # define NO_INLINE
# ifndef ARDUINOJSON_DEPRECATED
# define ARDUINOJSON_DEPRECATED(msg)
# endif
#endif #endif
#if __cplusplus >= 201103L #if __cplusplus >= 201103L

View File

@ -74,25 +74,6 @@ class JsonVariantConst : public VariantTag,
return Converter<T>::fromJson(*this); return Converter<T>::fromJson(*this);
} }
// Deprecated: use as<const char*>() instead.
// https://arduinojson.org/v6/api/jsonvariantconst/as/
template <typename T>
FORCE_INLINE typename enable_if<is_same<T, char*>::value, const char*>::type
ARDUINOJSON_DEPRECATED("Replace as<char*>() with as<const char*>()")
as() const {
return as<const char*>();
}
// Deprecated: use as<int8_t>() or as<uint8_t>() instead.
// https://arduinojson.org/v6/api/jsonvariantconst/as/
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 static_cast<char>(as<signed char>());
}
// Returns true if the value is of the specified type. // Returns true if the value is of the specified type.
// https://arduinojson.org/v6/api/jsonvariantconst/is/ // https://arduinojson.org/v6/api/jsonvariantconst/is/
template <typename T> template <typename T>
@ -103,25 +84,6 @@ class JsonVariantConst : public VariantTag,
return Converter<T>::checkJson(*this); return Converter<T>::checkJson(*this);
} }
// Deprecated: use is<const char*>() instead.
// https://arduinojson.org/v6/api/jsonvariantconst/is/
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*>();
}
// Deprecated: use is<int8_t>() or is<uint8_t>() instead.
// https://arduinojson.org/v6/api/jsonvariantconst/is/
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>();

View File

@ -142,12 +142,6 @@ VariantRefBase<TDerived>::to() const {
return *this; return *this;
} }
// Out of class definition to avoid #1560
template <typename TDerived>
inline bool VariantRefBase<TDerived>::set(char value) const {
return set(static_cast<signed char>(value));
}
template <typename TDerived> template <typename TDerived>
inline void convertToJson(const VariantRefBase<TDerived>& src, inline void convertToJson(const VariantRefBase<TDerived>& src,
JsonVariant dst) { JsonVariant dst) {

View File

@ -62,25 +62,6 @@ class VariantRefBase : public VariantTag {
return Converter<T>::fromJson(getVariant()); return Converter<T>::fromJson(getVariant());
} }
// Deprecated: use as<const char*>() instead.
// https://arduinojson.org/v6/api/jsonvariant/as/
template <typename T>
FORCE_INLINE typename enable_if<is_same<T, char*>::value, const char*>::type
ARDUINOJSON_DEPRECATED("Replace as<char*>() with as<const char*>()")
as() const {
return as<const char*>();
}
// Deprecated: use as<int8_t>() or as<uint8_t>() instead.
// https://arduinojson.org/v6/api/jsonvariant/as/
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 static_cast<char>(as<signed char>());
}
template <typename T> template <typename T>
FORCE_INLINE operator T() const { FORCE_INLINE operator T() const {
return as<T>(); return as<T>();
@ -126,25 +107,6 @@ class VariantRefBase : public VariantTag {
return Converter<T>::checkJson(getVariantConst()); return Converter<T>::checkJson(getVariantConst());
} }
// Deprecated: use is<const char*>() instead.
// https://arduinojson.org/v6/api/jsonvariant/is/
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*>();
}
// Deprecated: use is<int8_t>() or is<uint8_t>() instead.
// https://arduinojson.org/v6/api/jsonvariant/is/
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>();
}
// Shallow copies the specified value. // Shallow copies the specified value.
// https://arduinojson.org/v6/api/jsonvariant/shallowcopy/ // https://arduinojson.org/v6/api/jsonvariant/shallowcopy/
FORCE_INLINE void shallowCopy(JsonVariantConst target) { FORCE_INLINE void shallowCopy(JsonVariantConst target) {
@ -176,12 +138,6 @@ class VariantRefBase : public VariantTag {
return pool && !pool->overflowed(); return pool && !pool->overflowed();
} }
// Deprecated: use int8_t or uint8_t instead
// https://arduinojson.org/v6/api/jsonvariant/set/
bool ARDUINOJSON_DEPRECATED(
"Support for char is deprecated, use int8_t or uint8_t instead")
set(char value) const;
// Returns the size of the array or object. // Returns the size of the array or object.
// https://arduinojson.org/v6/api/jsonvariant/size/ // https://arduinojson.org/v6/api/jsonvariant/size/
FORCE_INLINE size_t size() const { FORCE_INLINE size_t size() const {