/src/arduinojson/src/ArduinoJson/Misc/SerializedValue.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/Strings/StringAdapters.hpp> |
8 | | |
9 | | ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE |
10 | | |
11 | | // A special type of data that can be used to insert pregenerated JSON portions. |
12 | | template <typename T> |
13 | | class SerializedValue { |
14 | | public: |
15 | | explicit SerializedValue(T str) : str_(str) {} |
16 | | operator T() const { |
17 | | return str_; |
18 | | } |
19 | | |
20 | | const char* data() const { |
21 | | return str_.c_str(); |
22 | | } |
23 | | |
24 | | size_t size() const { |
25 | | // CAUTION: the old Arduino String doesn't have size() |
26 | | return str_.length(); |
27 | | } |
28 | | |
29 | | private: |
30 | | T str_; |
31 | | }; |
32 | | |
33 | | template <typename TChar> |
34 | | class SerializedValue<TChar*> { |
35 | | public: |
36 | 204 | explicit SerializedValue(TChar* p, size_t n) : data_(p), size_(n) {} |
37 | | operator TChar*() const { |
38 | | return data_; |
39 | | } |
40 | | |
41 | 204 | TChar* data() const { |
42 | 204 | return data_; |
43 | 204 | } |
44 | | |
45 | 204 | size_t size() const { |
46 | 204 | return size_; |
47 | 204 | } |
48 | | |
49 | | private: |
50 | | TChar* data_; |
51 | | size_t size_; |
52 | | }; |
53 | | |
54 | | using RawString = SerializedValue<const char*>; |
55 | | |
56 | | template <typename T> |
57 | | inline SerializedValue<T> serialized(T str) { |
58 | | return SerializedValue<T>(str); |
59 | | } |
60 | | |
61 | | template <typename TChar> |
62 | | inline SerializedValue<TChar*> serialized(TChar* p) { |
63 | | return SerializedValue<TChar*>(p, detail::adaptString(p).size()); |
64 | | } |
65 | | |
66 | | template <typename TChar> |
67 | | inline SerializedValue<TChar*> serialized(TChar* p, size_t n) { |
68 | | return SerializedValue<TChar*>(p, n); |
69 | | } |
70 | | |
71 | | ARDUINOJSON_END_PUBLIC_NAMESPACE |