From 1d24caf066035d52eb67dfc6be4440db31213251 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Fri, 11 Jun 2021 11:46:20 +0200 Subject: [PATCH] Added InvalidConversion to identify invalid conversions (closes #1585) --- CHANGELOG.md | 1 + src/ArduinoJson/Array/ArrayRef.hpp | 2 ++ src/ArduinoJson/Object/ObjectRef.hpp | 3 +++ src/ArduinoJson/Variant/Converter.hpp | 5 +++++ src/ArduinoJson/Variant/VariantRef.hpp | 6 ++++++ 5 files changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 206cbd50..4a3bc949 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 a991db0d..9a6f82d8 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 c945fb6c..cb541bdb 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 476ca8fd..88afa526 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 10c3fdb7..06615920 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; }