/src/arduinojson/src/ArduinoJson/Deserialization/Reader.hpp
Line | Count | Source |
1 | | // ArduinoJson - https://arduinojson.org |
2 | | // Copyright © 2014-2026, Benoit BLANCHON |
3 | | // MIT License |
4 | | |
5 | | #pragma once |
6 | | |
7 | | #include <ArduinoJson/Namespace.hpp> |
8 | | #include <ArduinoJson/Polyfills/utility.hpp> |
9 | | |
10 | | #include <stdlib.h> // for size_t |
11 | | |
12 | | ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE |
13 | | |
14 | | // The default reader is a simple wrapper for Readers that are not copyable |
15 | | template <typename TSource, typename Enable = void> |
16 | | struct Reader { |
17 | | public: |
18 | | Reader(TSource& source) : source_(&source) {} |
19 | | |
20 | | int read() { |
21 | | // clang-format off |
22 | | return source_->read(); // Error here? See https://arduinojson.org/v7/invalid-input/ |
23 | | // clang-format on |
24 | | } |
25 | | |
26 | | size_t readBytes(char* buffer, size_t length) { |
27 | | return source_->readBytes(buffer, length); |
28 | | } |
29 | | |
30 | | private: |
31 | | TSource* source_; |
32 | | }; |
33 | | |
34 | | template <typename TSource, typename Enable = void> |
35 | | struct BoundedReader { |
36 | | // no default implementation because we need to pass the size to the |
37 | | // constructor |
38 | | }; |
39 | | |
40 | | ARDUINOJSON_END_PRIVATE_NAMESPACE |
41 | | |
42 | | #include <ArduinoJson/Deserialization/Readers/IteratorReader.hpp> |
43 | | #include <ArduinoJson/Deserialization/Readers/RamReader.hpp> |
44 | | #include <ArduinoJson/Deserialization/Readers/VariantReader.hpp> |
45 | | |
46 | | #if ARDUINOJSON_ENABLE_ARDUINO_STREAM |
47 | | # include <ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp> |
48 | | #endif |
49 | | |
50 | | #if ARDUINOJSON_ENABLE_ARDUINO_STRING |
51 | | # include <ArduinoJson/Deserialization/Readers/ArduinoStringReader.hpp> |
52 | | #endif |
53 | | |
54 | | #if ARDUINOJSON_ENABLE_PROGMEM |
55 | | # include <ArduinoJson/Deserialization/Readers/FlashReader.hpp> |
56 | | #endif |
57 | | |
58 | | #if ARDUINOJSON_ENABLE_STD_STREAM |
59 | | # include <ArduinoJson/Deserialization/Readers/StdStreamReader.hpp> |
60 | | #endif |
61 | | |
62 | | ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE |
63 | | |
64 | | template <typename TInput> |
65 | | Reader<remove_reference_t<TInput>> makeReader(TInput&& input) { |
66 | | return Reader<remove_reference_t<TInput>>{detail::forward<TInput>(input)}; |
67 | | } |
68 | | |
69 | | template <typename TChar> |
70 | 5.00k | BoundedReader<TChar*> makeReader(TChar* input, size_t inputSize) { |
71 | 5.00k | return BoundedReader<TChar*>{input, inputSize}; |
72 | 5.00k | } |
73 | | |
74 | | ARDUINOJSON_END_PRIVATE_NAMESPACE |