2
3
9namespace jsoneat::from_json::jsmn {
12
13
14
15
16
17
18
19
20template<
class ITER, size_t SIZE>
21bool take(ITER &it,
char (&dst)[SIZE],
const char *key) {
22 return it.takeValue(dst, key);
26
27
28
29
30
31
32
33
34template<
class ITER,
typename INT,
typename std::enable_if<std::is_integral<std::decay_t<INT>>::value>::type* =
nullptr>
35bool take(ITER &it, INT &dst,
const char *key) {
36 return it.takeValue(dst, key);
40
41
42
43
44
45
46
47
48template<
class ITER,
typename INT,
typename std::enable_if<std::is_floating_point<std::decay_t<INT>>::value>::type* =
nullptr>
49bool take(ITER &it, INT &dst,
const char *key) {
50 return it.takeValue(dst, key);
54
55
56
57
58
59
60
61
62template<
class ITER,
class C,
typename std::enable_if<std::is_class<std::decay_t<C>>::value>::type* =
nullptr>
63bool take(ITER &it, C &dst,
const char *key) {
64 return it.takeObject(dst, key);
68
69
70
71
72
73
74
75
76
77template<
class ITER,
typename INT, size_t SIZE,
typename std::enable_if<std::is_integral<std::decay_t<INT>>::value>::type* =
nullptr>
78bool take(ITER &it, INT (&dst)[SIZE],
const char *key) {
79 return it.takeValueArray(dst, key);
83
84
85
86
87
88
89
90
91
92template<
class ITER,
typename INT, size_t SIZE,
typename std::enable_if<std::is_floating_point<std::decay_t<INT>>::value>::type* =
nullptr>
93bool take(ITER &it, INT (&dst)[SIZE],
const char *key) {
94 return it.takeValueArray(dst, key);
98
99
100
101
102
103
104
105
106
107template<
class ITER,
class C, size_t SIZE,
typename std::enable_if<std::is_class<std::decay_t<C>>::value>::type* =
nullptr>
108bool take(ITER &it, C (&dst)[SIZE],
const char *key) {
109 return it.takeObjectArray(dst, key);
112template<
class ITER,
class C, size_t SIZE,
typename std::enable_if<std::is_class<std::decay_t<C>>::value>::type* =
nullptr>
113bool take(ITER &it, std::array<C, SIZE> &dst,
const char *key) {
114 return it.takeObjectArray(dst, key);
118
119
120
121
122
129
130
131
132
133
134
135
136
137
138template<
class ITER,
typename T,
typename ... Args>
140 if (jsoneat::from_json::jsmn::take(it, pair.val, pair.key))
142 return take_one_of(it, args...);
146
147
148
149
150
151
152
153
154
155template<
class ITER,
typename T,
typename ... Args>
157 assert(it->type == JSMN_OBJECT);
159 auto count = it->size;
160 for (++it; count > 0 && it; --count) {
161 if (!take_one_of(it, pair, args...))
bool take_one_of(ITER &it)
function template used as terminator in variadic template
Definition from_json_jsmn.hh:124
bool take(ITER &it, char(&dst)[SIZE], const char *key)
overloaded function template for de-serializing from json-string into char-array
Definition from_json_jsmn.hh:21
bool take(ITER &it, INT(&dst)[SIZE], const char *key)
overloaded function template for de-serializing an array integral type values
Definition from_json_jsmn.hh:78
bool take(ITER &it, INT &dst, const char *key)
overloaded function template for de-serializing integral types
Definition from_json_jsmn.hh:35
bool deserialize_object(ITER &it, T pair, Args ... args)
variadic function template for de-serializing all members of an object in one call
Definition from_json_jsmn.hh:156
bool take_one_of(ITER &it, T pair, Args ... args)
variadic function template for de-serializing data of current JSMN iterator into the matching pair fr...
Definition from_json_jsmn.hh:139