diff --git a/CHANGELOG.md b/CHANGELOG.md index 206cbd504..4a3bc9492 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ HEAD * Fixed error `[Pe070]: incomplete type is not allowed` on IAR (issue #1560) * Fixed `serializeJson(doc, String)` when allocation fails (issue #1572) * Fixed clang-tidy warnings (issue #1574, PR #1577 by @armandas) +* Added fake class `InvalidConversion` to easily identify invalid conversions (issue #1585) v6.18.0 (2021-05-05) ------- diff --git a/src/ArduinoJson/Array/ArrayRef.hpp b/src/ArduinoJson/Array/ArrayRef.hpp index a991db0d7..9a6f82d83 100644 --- a/src/ArduinoJson/Array/ArrayRef.hpp +++ b/src/ArduinoJson/Array/ArrayRef.hpp @@ -193,6 +193,8 @@ struct Converter { return ArrayRef(pool, data != 0 ? data->asArray() : 0); } + static InvalidConversion fromJson(VariantConstRef); + static bool checkJson(VariantConstRef) { return false; } diff --git a/src/ArduinoJson/Object/ObjectRef.hpp b/src/ArduinoJson/Object/ObjectRef.hpp index c945fb6ca..cb541bdbc 100644 --- a/src/ArduinoJson/Object/ObjectRef.hpp +++ b/src/ArduinoJson/Object/ObjectRef.hpp @@ -265,6 +265,9 @@ struct Converter { return ObjectRef(pool, data != 0 ? data->asObject() : 0); } + static InvalidConversion fromJson( + VariantConstRef); + static bool checkJson(VariantConstRef) { return false; } diff --git a/src/ArduinoJson/Variant/Converter.hpp b/src/ArduinoJson/Variant/Converter.hpp index 476ca8fdf..88afa526d 100644 --- a/src/ArduinoJson/Variant/Converter.hpp +++ b/src/ArduinoJson/Variant/Converter.hpp @@ -9,4 +9,9 @@ namespace ARDUINOJSON_NAMESPACE { template struct Converter; +// clang-format off +template +class InvalidConversion; // Error here? See https://arduinojson.org/v6/invalid-conversion/ +// clang-format on + } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Variant/VariantRef.hpp b/src/ArduinoJson/Variant/VariantRef.hpp index 10c3fdb74..06615920b 100644 --- a/src/ArduinoJson/Variant/VariantRef.hpp +++ b/src/ArduinoJson/Variant/VariantRef.hpp @@ -342,13 +342,19 @@ struct Converter { static bool toJson(VariantRef src, VariantRef dst) { return variantCopyFrom(getData(dst), getData(src), getPool(dst)); } + static VariantRef fromJson(VariantRef src) { return src; } + + static InvalidConversion fromJson( + VariantConstRef); + static bool checkJson(VariantRef src) { VariantData *data = getData(src); return !!data; } + static bool checkJson(VariantConstRef) { return false; }