From 5abf512276a4de34750a420059dcfb74da83d0dd Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Thu, 16 Feb 2023 11:17:15 +0100 Subject: [PATCH] Reduce number of overloads of `deserializeJson()` and `deserializeMsgPack()` (#1820) --- .../DeserializationOptions.hpp | 35 +++++ src/ArduinoJson/Deserialization/Reader.hpp | 16 +++ .../Deserialization/deserialize.hpp | 74 ++++------ src/ArduinoJson/Json/JsonDeserializer.hpp | 134 ++---------------- .../MsgPack/MsgPackDeserializer.hpp | 130 ++--------------- .../Polyfills/type_traits/is_base_of.hpp | 5 +- src/ArduinoJson/Polyfills/utility.hpp | 16 +++ 7 files changed, 114 insertions(+), 296 deletions(-) create mode 100644 src/ArduinoJson/Deserialization/DeserializationOptions.hpp create mode 100644 src/ArduinoJson/Polyfills/utility.hpp diff --git a/src/ArduinoJson/Deserialization/DeserializationOptions.hpp b/src/ArduinoJson/Deserialization/DeserializationOptions.hpp new file mode 100644 index 00000000..0a8d4ec9 --- /dev/null +++ b/src/ArduinoJson/Deserialization/DeserializationOptions.hpp @@ -0,0 +1,35 @@ +// ArduinoJson - https://arduinojson.org +// Copyright © 2014-2022, Benoit BLANCHON +// MIT License + +#pragma once + +#include +#include + +ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE + +template +struct DeserializationOptions { + TFilter filter; + DeserializationOption::NestingLimit nestingLimit; +}; + +template +inline DeserializationOptions makeDeserializationOptions( + TFilter filter, DeserializationOption::NestingLimit nestingLimit = {}) { + return {filter, nestingLimit}; +} + +template +inline DeserializationOptions makeDeserializationOptions( + DeserializationOption::NestingLimit nestingLimit, TFilter filter) { + return {filter, nestingLimit}; +} + +inline DeserializationOptions makeDeserializationOptions( + DeserializationOption::NestingLimit nestingLimit = {}) { + return {{}, nestingLimit}; +} + +ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Deserialization/Reader.hpp b/src/ArduinoJson/Deserialization/Reader.hpp index 3abbaeb8..d6f91518 100644 --- a/src/ArduinoJson/Deserialization/Reader.hpp +++ b/src/ArduinoJson/Deserialization/Reader.hpp @@ -5,6 +5,7 @@ #pragma once #include +#include #include // for size_t @@ -55,3 +56,18 @@ ARDUINOJSON_END_PRIVATE_NAMESPACE #if ARDUINOJSON_ENABLE_STD_STREAM # include #endif + +ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE + +template +Reader::type> makeReader(TInput&& input) { + return Reader::type>{ + detail::forward(input)}; +} + +template +BoundedReader makeReader(TChar* input, size_t inputSize) { + return BoundedReader{input, inputSize}; +} + +ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Deserialization/deserialize.hpp b/src/ArduinoJson/Deserialization/deserialize.hpp index 75c4416e..a9c97193 100644 --- a/src/ArduinoJson/Deserialization/deserialize.hpp +++ b/src/ArduinoJson/Deserialization/deserialize.hpp @@ -5,9 +5,9 @@ #pragma once #include -#include -#include +#include #include +#include #include ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE @@ -21,57 +21,33 @@ TDeserializer makeDeserializer(MemoryPool* pool, return TDeserializer(pool, reader, writer); } -// deserialize(JsonDocument&, const std::string&, NestingLimit, Filter); -// deserialize(JsonDocument&, const String&, NestingLimit, Filter); -// deserialize(JsonDocument&, char*, NestingLimit, Filter); -// deserialize(JsonDocument&, const char*, NestingLimit, Filter); -// deserialize(JsonDocument&, const __FlashStringHelper*, NestingLimit, Filter); -template