jsoncons 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. checksums.yaml +7 -0
  2. data/ext/jsoncons/extconf.rb +43 -0
  3. data/ext/jsoncons/jsoncons.cpp +161 -0
  4. data/ext/jsoncons/jsoncons.h +10 -0
  5. data/jsoncons.gemspec +44 -0
  6. data/lib/jsoncons/jsoncons/examples/input/address-book.json +13 -0
  7. data/lib/jsoncons/jsoncons/examples/input/books.json +28 -0
  8. data/lib/jsoncons/jsoncons/examples/input/countries.json +7 -0
  9. data/lib/jsoncons/jsoncons/examples/input/employees.json +30 -0
  10. data/lib/jsoncons/jsoncons/examples/input/jsonschema/name.json +15 -0
  11. data/lib/jsoncons/jsoncons/examples/input/multiple-json-objects.json +3 -0
  12. data/lib/jsoncons/jsoncons/examples/input/sales.csv +6 -0
  13. data/lib/jsoncons/jsoncons/examples/input/store.json +28 -0
  14. data/lib/jsoncons/jsoncons/examples/input/tasks.csv +6 -0
  15. data/lib/jsoncons/jsoncons/include/jsoncons/allocator_holder.hpp +38 -0
  16. data/lib/jsoncons/jsoncons/include/jsoncons/basic_json.hpp +5905 -0
  17. data/lib/jsoncons/jsoncons/include/jsoncons/bigint.hpp +1611 -0
  18. data/lib/jsoncons/jsoncons/include/jsoncons/byte_string.hpp +820 -0
  19. data/lib/jsoncons/jsoncons/include/jsoncons/config/binary_config.hpp +226 -0
  20. data/lib/jsoncons/jsoncons/include/jsoncons/config/compiler_support.hpp +375 -0
  21. data/lib/jsoncons/jsoncons/include/jsoncons/config/jsoncons_config.hpp +309 -0
  22. data/lib/jsoncons/jsoncons/include/jsoncons/config/version.hpp +40 -0
  23. data/lib/jsoncons/jsoncons/include/jsoncons/conv_error.hpp +218 -0
  24. data/lib/jsoncons/jsoncons/include/jsoncons/decode_json.hpp +209 -0
  25. data/lib/jsoncons/jsoncons/include/jsoncons/decode_traits.hpp +651 -0
  26. data/lib/jsoncons/jsoncons/include/jsoncons/detail/endian.hpp +44 -0
  27. data/lib/jsoncons/jsoncons/include/jsoncons/detail/grisu3.hpp +312 -0
  28. data/lib/jsoncons/jsoncons/include/jsoncons/detail/optional.hpp +483 -0
  29. data/lib/jsoncons/jsoncons/include/jsoncons/detail/parse_number.hpp +1133 -0
  30. data/lib/jsoncons/jsoncons/include/jsoncons/detail/span.hpp +188 -0
  31. data/lib/jsoncons/jsoncons/include/jsoncons/detail/string_view.hpp +537 -0
  32. data/lib/jsoncons/jsoncons/include/jsoncons/detail/string_wrapper.hpp +370 -0
  33. data/lib/jsoncons/jsoncons/include/jsoncons/detail/write_number.hpp +567 -0
  34. data/lib/jsoncons/jsoncons/include/jsoncons/encode_json.hpp +315 -0
  35. data/lib/jsoncons/jsoncons/include/jsoncons/encode_traits.hpp +378 -0
  36. data/lib/jsoncons/jsoncons/include/jsoncons/json.hpp +18 -0
  37. data/lib/jsoncons/jsoncons/include/jsoncons/json_array.hpp +324 -0
  38. data/lib/jsoncons/jsoncons/include/jsoncons/json_content_handler.hpp +12 -0
  39. data/lib/jsoncons/jsoncons/include/jsoncons/json_cursor.hpp +448 -0
  40. data/lib/jsoncons/jsoncons/include/jsoncons/json_decoder.hpp +420 -0
  41. data/lib/jsoncons/jsoncons/include/jsoncons/json_encoder.hpp +1587 -0
  42. data/lib/jsoncons/jsoncons/include/jsoncons/json_error.hpp +156 -0
  43. data/lib/jsoncons/jsoncons/include/jsoncons/json_exception.hpp +241 -0
  44. data/lib/jsoncons/jsoncons/include/jsoncons/json_filter.hpp +653 -0
  45. data/lib/jsoncons/jsoncons/include/jsoncons/json_fwd.hpp +23 -0
  46. data/lib/jsoncons/jsoncons/include/jsoncons/json_object.hpp +1772 -0
  47. data/lib/jsoncons/jsoncons/include/jsoncons/json_options.hpp +862 -0
  48. data/lib/jsoncons/jsoncons/include/jsoncons/json_parser.hpp +2900 -0
  49. data/lib/jsoncons/jsoncons/include/jsoncons/json_reader.hpp +731 -0
  50. data/lib/jsoncons/jsoncons/include/jsoncons/json_traits_macros.hpp +1072 -0
  51. data/lib/jsoncons/jsoncons/include/jsoncons/json_traits_macros_deprecated.hpp +144 -0
  52. data/lib/jsoncons/jsoncons/include/jsoncons/json_type.hpp +206 -0
  53. data/lib/jsoncons/jsoncons/include/jsoncons/json_type_traits.hpp +1830 -0
  54. data/lib/jsoncons/jsoncons/include/jsoncons/json_visitor.hpp +1560 -0
  55. data/lib/jsoncons/jsoncons/include/jsoncons/json_visitor2.hpp +2079 -0
  56. data/lib/jsoncons/jsoncons/include/jsoncons/pretty_print.hpp +89 -0
  57. data/lib/jsoncons/jsoncons/include/jsoncons/ser_context.hpp +62 -0
  58. data/lib/jsoncons/jsoncons/include/jsoncons/sink.hpp +289 -0
  59. data/lib/jsoncons/jsoncons/include/jsoncons/source.hpp +777 -0
  60. data/lib/jsoncons/jsoncons/include/jsoncons/source_adaptor.hpp +148 -0
  61. data/lib/jsoncons/jsoncons/include/jsoncons/staj2_cursor.hpp +1189 -0
  62. data/lib/jsoncons/jsoncons/include/jsoncons/staj_cursor.hpp +1254 -0
  63. data/lib/jsoncons/jsoncons/include/jsoncons/staj_iterator.hpp +449 -0
  64. data/lib/jsoncons/jsoncons/include/jsoncons/tag_type.hpp +245 -0
  65. data/lib/jsoncons/jsoncons/include/jsoncons/text_source_adaptor.hpp +144 -0
  66. data/lib/jsoncons/jsoncons/include/jsoncons/traits_extension.hpp +884 -0
  67. data/lib/jsoncons/jsoncons/include/jsoncons/typed_array_view.hpp +250 -0
  68. data/lib/jsoncons/jsoncons/include/jsoncons/unicode_traits.hpp +1330 -0
  69. data/lib/jsoncons/jsoncons/include/jsoncons/uri.hpp +635 -0
  70. data/lib/jsoncons/jsoncons/include/jsoncons/value_converter.hpp +340 -0
  71. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson.hpp +23 -0
  72. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_cursor.hpp +320 -0
  73. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_decimal128.hpp +865 -0
  74. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_encoder.hpp +585 -0
  75. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_error.hpp +103 -0
  76. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_oid.hpp +245 -0
  77. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_options.hpp +75 -0
  78. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_parser.hpp +645 -0
  79. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_reader.hpp +92 -0
  80. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_type.hpp +44 -0
  81. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/decode_bson.hpp +201 -0
  82. data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/encode_bson.hpp +144 -0
  83. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor.hpp +26 -0
  84. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_cursor.hpp +351 -0
  85. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_cursor2.hpp +265 -0
  86. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_detail.hpp +93 -0
  87. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_encoder.hpp +1766 -0
  88. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_error.hpp +105 -0
  89. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_options.hpp +113 -0
  90. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_parser.hpp +1942 -0
  91. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_reader.hpp +116 -0
  92. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/decode_cbor.hpp +203 -0
  93. data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/encode_cbor.hpp +151 -0
  94. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv.hpp +17 -0
  95. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_cursor.hpp +358 -0
  96. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_encoder.hpp +954 -0
  97. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_error.hpp +85 -0
  98. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_options.hpp +973 -0
  99. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_parser.hpp +2099 -0
  100. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_reader.hpp +348 -0
  101. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_serializer.hpp +12 -0
  102. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/decode_csv.hpp +208 -0
  103. data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/encode_csv.hpp +122 -0
  104. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jmespath/jmespath.hpp +5215 -0
  105. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jmespath/jmespath_error.hpp +215 -0
  106. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpatch/jsonpatch.hpp +579 -0
  107. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpatch/jsonpatch_error.hpp +121 -0
  108. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/expression.hpp +3329 -0
  109. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/flatten.hpp +432 -0
  110. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/json_location.hpp +445 -0
  111. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/json_query.hpp +115 -0
  112. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath.hpp +13 -0
  113. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_error.hpp +240 -0
  114. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_expression.hpp +2612 -0
  115. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_selector.hpp +1322 -0
  116. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpointer/jsonpointer.hpp +1577 -0
  117. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpointer/jsonpointer_error.hpp +119 -0
  118. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/format_validator.hpp +968 -0
  119. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/json_validator.hpp +120 -0
  120. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema.hpp +13 -0
  121. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema_error.hpp +105 -0
  122. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema_version.hpp +18 -0
  123. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/keyword_validator.hpp +1745 -0
  124. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/keyword_validator_factory.hpp +556 -0
  125. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_draft7.hpp +198 -0
  126. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_location.hpp +200 -0
  127. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_version.hpp +35 -0
  128. data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/subschema.hpp +144 -0
  129. data/lib/jsoncons/jsoncons/include/jsoncons_ext/mergepatch/mergepatch.hpp +103 -0
  130. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/decode_msgpack.hpp +202 -0
  131. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/encode_msgpack.hpp +142 -0
  132. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack.hpp +24 -0
  133. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_cursor.hpp +343 -0
  134. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_cursor2.hpp +259 -0
  135. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_encoder.hpp +753 -0
  136. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_error.hpp +94 -0
  137. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_options.hpp +74 -0
  138. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_parser.hpp +748 -0
  139. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_reader.hpp +116 -0
  140. data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_type.hpp +63 -0
  141. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/decode_ubjson.hpp +201 -0
  142. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/encode_ubjson.hpp +142 -0
  143. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson.hpp +23 -0
  144. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_cursor.hpp +307 -0
  145. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_encoder.hpp +502 -0
  146. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_error.hpp +100 -0
  147. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_options.hpp +87 -0
  148. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_parser.hpp +880 -0
  149. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_reader.hpp +92 -0
  150. data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_type.hpp +43 -0
  151. data/lib/jsoncons/version.rb +5 -0
  152. data/lib/jsoncons.rb +33 -0
  153. data/test/jsoncons_test.rb +108 -0
  154. data/test/test_helper.rb +7 -0
  155. metadata +268 -0
@@ -0,0 +1,653 @@
1
+ // Copyright 2013 Daniel Parker
2
+ // Distributed under the Boost license, Version 1.0.
3
+ // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4
+
5
+ // See https://github.com/danielaparker/jsoncons for latest version
6
+
7
+ #ifndef JSONCONS_JSON_FILTER_HPP
8
+ #define JSONCONS_JSON_FILTER_HPP
9
+
10
+ #include <string>
11
+
12
+ #include <jsoncons/json_visitor.hpp>
13
+
14
+ namespace jsoncons {
15
+
16
+ template <class CharT>
17
+ class basic_json_filter : public basic_json_visitor<CharT>
18
+ {
19
+ public:
20
+ using typename basic_json_visitor<CharT>::char_type;
21
+ using typename basic_json_visitor<CharT>::string_view_type;
22
+ private:
23
+ basic_json_visitor<char_type>* destination_;
24
+
25
+ // noncopyable
26
+ basic_json_filter(const basic_json_filter&) = delete;
27
+ basic_json_filter& operator=(const basic_json_filter&) = delete;
28
+ public:
29
+ basic_json_filter(basic_json_visitor<char_type>& visitor)
30
+ : destination_(std::addressof(visitor))
31
+ {
32
+ }
33
+
34
+ // moveable
35
+ basic_json_filter(basic_json_filter&&) = default;
36
+ basic_json_filter& operator=(basic_json_filter&&) = default;
37
+
38
+ basic_json_visitor<char_type>& destination()
39
+ {
40
+ return *destination_;
41
+ }
42
+
43
+ #if !defined(JSONCONS_NO_DEPRECATED)
44
+
45
+ JSONCONS_DEPRECATED_MSG("Instead, use destination()")
46
+ basic_json_visitor<char_type>& to_handler()
47
+ {
48
+ return destination_;
49
+ }
50
+ JSONCONS_DEPRECATED_MSG("Instead, use destination")
51
+ basic_json_visitor<char_type>& input_handler()
52
+ {
53
+ return destination_;
54
+ }
55
+
56
+ JSONCONS_DEPRECATED_MSG("Instead, use destination")
57
+ basic_json_visitor<char_type>& downstream_handler()
58
+ {
59
+ return destination_;
60
+ }
61
+
62
+ JSONCONS_DEPRECATED_MSG("Instead, use destination")
63
+ basic_json_visitor<char_type>& destination_handler()
64
+ {
65
+ return destination_;
66
+ }
67
+ #endif
68
+
69
+ private:
70
+ void visit_flush() override
71
+ {
72
+ destination_->flush();
73
+ }
74
+
75
+ bool visit_begin_object(semantic_tag tag, const ser_context& context, std::error_code& ec) override
76
+ {
77
+ return destination_->begin_object(tag, context, ec);
78
+ }
79
+
80
+ bool visit_begin_object(std::size_t length, semantic_tag tag, const ser_context& context, std::error_code& ec) override
81
+ {
82
+ return destination_->begin_object(length, tag, context, ec);
83
+ }
84
+
85
+ bool visit_end_object(const ser_context& context, std::error_code& ec) override
86
+ {
87
+ return destination_->end_object(context, ec);
88
+ }
89
+
90
+ bool visit_begin_array(semantic_tag tag, const ser_context& context, std::error_code& ec) override
91
+ {
92
+ return destination_->begin_array(tag, context, ec);
93
+ }
94
+
95
+ bool visit_begin_array(std::size_t length, semantic_tag tag, const ser_context& context, std::error_code& ec) override
96
+ {
97
+ return destination_->begin_array(length, tag, context, ec);
98
+ }
99
+
100
+ bool visit_end_array(const ser_context& context, std::error_code& ec) override
101
+ {
102
+ return destination_->end_array(context, ec);
103
+ }
104
+
105
+ bool visit_key(const string_view_type& name,
106
+ const ser_context& context,
107
+ std::error_code& ec) override
108
+ {
109
+ return destination_->key(name, context, ec);
110
+ }
111
+
112
+ bool visit_string(const string_view_type& value,
113
+ semantic_tag tag,
114
+ const ser_context& context,
115
+ std::error_code& ec) override
116
+ {
117
+ return destination_->string_value(value, tag, context, ec);
118
+ }
119
+
120
+ bool visit_byte_string(const byte_string_view& b,
121
+ semantic_tag tag,
122
+ const ser_context& context,
123
+ std::error_code& ec) override
124
+ {
125
+ return destination_->byte_string_value(b, tag, context, ec);
126
+ }
127
+
128
+ bool visit_byte_string(const byte_string_view& b,
129
+ uint64_t ext_tag,
130
+ const ser_context& context,
131
+ std::error_code& ec) override
132
+ {
133
+ return destination_->byte_string_value(b, ext_tag, context, ec);
134
+ }
135
+
136
+ bool visit_uint64(uint64_t value, semantic_tag tag, const ser_context& context, std::error_code& ec) override
137
+ {
138
+ return destination_->uint64_value(value, tag, context, ec);
139
+ }
140
+
141
+ bool visit_int64(int64_t value, semantic_tag tag, const ser_context& context, std::error_code& ec) override
142
+ {
143
+ return destination_->int64_value(value, tag, context, ec);
144
+ }
145
+
146
+ bool visit_half(uint16_t value, semantic_tag tag, const ser_context& context, std::error_code& ec) override
147
+ {
148
+ return destination_->half_value(value, tag, context, ec);
149
+ }
150
+
151
+ bool visit_double(double value, semantic_tag tag, const ser_context& context, std::error_code& ec) override
152
+ {
153
+ return destination_->double_value(value, tag, context, ec);
154
+ }
155
+
156
+ bool visit_bool(bool value, semantic_tag tag, const ser_context& context, std::error_code& ec) override
157
+ {
158
+ return destination_->bool_value(value, tag, context, ec);
159
+ }
160
+
161
+ bool visit_null(semantic_tag tag, const ser_context& context, std::error_code& ec) override
162
+ {
163
+ return destination_->null_value(tag, context, ec);
164
+ }
165
+
166
+ bool visit_typed_array(const jsoncons::span<const uint8_t>& s,
167
+ semantic_tag tag,
168
+ const ser_context& context,
169
+ std::error_code& ec) override
170
+ {
171
+ return destination_->typed_array(s, tag, context, ec);
172
+ }
173
+
174
+ bool visit_typed_array(const jsoncons::span<const uint16_t>& s,
175
+ semantic_tag tag,
176
+ const ser_context& context,
177
+ std::error_code& ec) override
178
+ {
179
+ return destination_->typed_array(s, tag, context, ec);
180
+ }
181
+
182
+ bool visit_typed_array(const jsoncons::span<const uint32_t>& s,
183
+ semantic_tag tag,
184
+ const ser_context& context,
185
+ std::error_code& ec) override
186
+ {
187
+ return destination_->typed_array(s, tag, context, ec);
188
+ }
189
+
190
+ bool visit_typed_array(const jsoncons::span<const uint64_t>& s,
191
+ semantic_tag tag,
192
+ const ser_context& context,
193
+ std::error_code& ec) override
194
+ {
195
+ return destination_->typed_array(s, tag, context, ec);
196
+ }
197
+
198
+ bool visit_typed_array(const jsoncons::span<const int8_t>& s,
199
+ semantic_tag tag,
200
+ const ser_context& context,
201
+ std::error_code& ec) override
202
+ {
203
+ return destination_->typed_array(s, tag, context, ec);
204
+ }
205
+
206
+ bool visit_typed_array(const jsoncons::span<const int16_t>& s,
207
+ semantic_tag tag,
208
+ const ser_context& context,
209
+ std::error_code& ec) override
210
+ {
211
+ return destination_->typed_array(s, tag, context, ec);
212
+ }
213
+
214
+ bool visit_typed_array(const jsoncons::span<const int32_t>& s,
215
+ semantic_tag tag,
216
+ const ser_context& context,
217
+ std::error_code& ec) override
218
+ {
219
+ return destination_->typed_array(s, tag, context, ec);
220
+ }
221
+
222
+ bool visit_typed_array(const jsoncons::span<const int64_t>& s,
223
+ semantic_tag tag,
224
+ const ser_context& context,
225
+ std::error_code& ec) override
226
+ {
227
+ return destination_->typed_array(s, tag, context, ec);
228
+ }
229
+
230
+ bool visit_typed_array(half_arg_t,
231
+ const jsoncons::span<const uint16_t>& s,
232
+ semantic_tag tag,
233
+ const ser_context& context,
234
+ std::error_code& ec) override
235
+ {
236
+ return destination_->typed_array(half_arg, s, tag, context, ec);
237
+ }
238
+
239
+ bool visit_typed_array(const jsoncons::span<const float>& s,
240
+ semantic_tag tag,
241
+ const ser_context& context,
242
+ std::error_code& ec) override
243
+ {
244
+ return destination_->typed_array(s, tag, context, ec);
245
+ }
246
+
247
+ bool visit_typed_array(const jsoncons::span<const double>& s,
248
+ semantic_tag tag,
249
+ const ser_context& context,
250
+ std::error_code& ec) override
251
+ {
252
+ return destination_->typed_array(s, tag, context, ec);
253
+ }
254
+
255
+ bool visit_begin_multi_dim(const jsoncons::span<const size_t>& shape,
256
+ semantic_tag tag,
257
+ const ser_context& context,
258
+ std::error_code& ec) override
259
+ {
260
+ return destination_->begin_multi_dim(shape, tag, context, ec);
261
+ }
262
+
263
+ bool visit_end_multi_dim(const ser_context& context,
264
+ std::error_code& ec) override
265
+ {
266
+ return destination_->end_multi_dim(context, ec);
267
+ }
268
+ };
269
+
270
+ template <class CharT>
271
+ class basic_rename_object_key_filter : public basic_json_filter<CharT>
272
+ {
273
+ public:
274
+ using typename basic_json_filter<CharT>::string_view_type;
275
+
276
+ private:
277
+ std::basic_string<CharT> name_;
278
+ std::basic_string<CharT> new_name_;
279
+ public:
280
+ basic_rename_object_key_filter(const std::basic_string<CharT>& name,
281
+ const std::basic_string<CharT>& new_name,
282
+ basic_json_visitor<CharT>& visitor)
283
+ : basic_json_filter<CharT>(visitor),
284
+ name_(name), new_name_(new_name)
285
+ {
286
+ }
287
+
288
+ private:
289
+ bool visit_key(const string_view_type& name,
290
+ const ser_context& context,
291
+ std::error_code& ec) override
292
+ {
293
+ if (name == name_)
294
+ {
295
+ return this->destination().key(new_name_,context, ec);
296
+ }
297
+ else
298
+ {
299
+ return this->destination().key(name,context,ec);
300
+ }
301
+ }
302
+ };
303
+
304
+ template <class From,class To>
305
+ class json_visitor_adaptor_base : public From
306
+ {
307
+ public:
308
+ using typename From::string_view_type;
309
+ private:
310
+ To* destination_;
311
+
312
+ // noncopyable
313
+ json_visitor_adaptor_base(const json_visitor_adaptor_base&) = delete;
314
+ json_visitor_adaptor_base& operator=(const json_visitor_adaptor_base&) = delete;
315
+ public:
316
+ json_visitor_adaptor_base(To& visitor)
317
+ : destination_(std::addressof(visitor))
318
+ {
319
+ }
320
+
321
+ // moveable
322
+ json_visitor_adaptor_base(json_visitor_adaptor_base&&) = default;
323
+ json_visitor_adaptor_base& operator=(json_visitor_adaptor_base&&) = default;
324
+
325
+ To& destination()
326
+ {
327
+ return *destination_;
328
+ }
329
+
330
+ private:
331
+ void visit_flush() override
332
+ {
333
+ destination_->flush();
334
+ }
335
+
336
+ bool visit_begin_object(semantic_tag tag,
337
+ const ser_context& context,
338
+ std::error_code& ec) override
339
+ {
340
+ return destination_->begin_object(tag, context, ec);
341
+ }
342
+
343
+ bool visit_begin_object(std::size_t length,
344
+ semantic_tag tag,
345
+ const ser_context& context,
346
+ std::error_code& ec) override
347
+ {
348
+ return destination_->begin_object(length, tag, context, ec);
349
+ }
350
+
351
+ bool visit_end_object(const ser_context& context, std::error_code& ec) override
352
+ {
353
+ return destination_->end_object(context, ec);
354
+ }
355
+
356
+ bool visit_begin_array(semantic_tag tag,
357
+ const ser_context& context,
358
+ std::error_code& ec) override
359
+ {
360
+ return destination_->begin_array(tag, context, ec);
361
+ }
362
+
363
+ bool visit_begin_array(std::size_t length,
364
+ semantic_tag tag,
365
+ const ser_context& context,
366
+ std::error_code& ec) override
367
+ {
368
+ return destination_->begin_array(length, tag, context, ec);
369
+ }
370
+
371
+ bool visit_end_array(const ser_context& context, std::error_code& ec) override
372
+ {
373
+ return destination_->end_array(context, ec);
374
+ }
375
+
376
+ bool visit_byte_string(const byte_string_view& b,
377
+ semantic_tag tag,
378
+ const ser_context& context,
379
+ std::error_code& ec) override
380
+ {
381
+ return destination_->byte_string_value(b, tag, context, ec);
382
+ }
383
+
384
+ bool visit_byte_string(const byte_string_view& b,
385
+ uint64_t ext_tag,
386
+ const ser_context& context,
387
+ std::error_code& ec) override
388
+ {
389
+ return destination_->byte_string_value(b, ext_tag, context, ec);
390
+ }
391
+
392
+ bool visit_half(uint16_t value, semantic_tag tag, const ser_context& context, std::error_code& ec) override
393
+ {
394
+ return destination_->half_value(value, tag, context, ec);
395
+ }
396
+
397
+ bool visit_double(double value, semantic_tag tag, const ser_context& context, std::error_code& ec) override
398
+ {
399
+ return destination_->double_value(value, tag, context, ec);
400
+ }
401
+
402
+ bool visit_int64(int64_t value, semantic_tag tag, const ser_context& context, std::error_code& ec) override
403
+ {
404
+ return destination_->int64_value(value, tag, context, ec);
405
+ }
406
+
407
+ bool visit_uint64(uint64_t value, semantic_tag tag, const ser_context& context, std::error_code& ec) override
408
+ {
409
+ return destination_->uint64_value(value, tag, context, ec);
410
+ }
411
+
412
+ bool visit_bool(bool value, semantic_tag tag, const ser_context& context, std::error_code& ec) override
413
+ {
414
+ return destination_->bool_value(value, tag, context, ec);
415
+ }
416
+
417
+ bool visit_null(semantic_tag tag, const ser_context& context, std::error_code& ec) override
418
+ {
419
+ return destination_->null_value(tag, context, ec);
420
+ }
421
+
422
+ bool visit_typed_array(const jsoncons::span<const uint8_t>& s,
423
+ semantic_tag tag,
424
+ const ser_context& context,
425
+ std::error_code& ec) override
426
+ {
427
+ return destination_->typed_array(s, tag, context, ec);
428
+ }
429
+
430
+ bool visit_typed_array(const jsoncons::span<const uint16_t>& s,
431
+ semantic_tag tag,
432
+ const ser_context& context,
433
+ std::error_code& ec) override
434
+ {
435
+ return destination_->typed_array(s, tag, context, ec);
436
+ }
437
+
438
+ bool visit_typed_array(const jsoncons::span<const uint32_t>& s,
439
+ semantic_tag tag,
440
+ const ser_context& context,
441
+ std::error_code& ec) override
442
+ {
443
+ return destination_->typed_array(s, tag, context, ec);
444
+ }
445
+
446
+ bool visit_typed_array(const jsoncons::span<const uint64_t>& s,
447
+ semantic_tag tag,
448
+ const ser_context& context,
449
+ std::error_code& ec) override
450
+ {
451
+ return destination_->typed_array(s, tag, context, ec);
452
+ }
453
+
454
+ bool visit_typed_array(const jsoncons::span<const int8_t>& s,
455
+ semantic_tag tag,
456
+ const ser_context& context,
457
+ std::error_code& ec) override
458
+ {
459
+ return destination_->typed_array(s, tag, context, ec);
460
+ }
461
+
462
+ bool visit_typed_array(const jsoncons::span<const int16_t>& s,
463
+ semantic_tag tag,
464
+ const ser_context& context,
465
+ std::error_code& ec) override
466
+ {
467
+ return destination_->typed_array(s, tag, context, ec);
468
+ }
469
+
470
+ bool visit_typed_array(const jsoncons::span<const int32_t>& s,
471
+ semantic_tag tag,
472
+ const ser_context& context,
473
+ std::error_code& ec) override
474
+ {
475
+ return destination_->typed_array(s, tag, context, ec);
476
+ }
477
+
478
+ bool visit_typed_array(const jsoncons::span<const int64_t>& s,
479
+ semantic_tag tag,
480
+ const ser_context& context,
481
+ std::error_code& ec) override
482
+ {
483
+ return destination_->typed_array(s, tag, context, ec);
484
+ }
485
+
486
+ bool visit_typed_array(half_arg_t,
487
+ const jsoncons::span<const uint16_t>& s,
488
+ semantic_tag tag,
489
+ const ser_context& context,
490
+ std::error_code& ec) override
491
+ {
492
+ return destination_->typed_array(half_arg, s, tag, context, ec);
493
+ }
494
+
495
+ bool visit_typed_array(const jsoncons::span<const float>& s,
496
+ semantic_tag tag,
497
+ const ser_context& context,
498
+ std::error_code& ec) override
499
+ {
500
+ return destination_->typed_array(s, tag, context, ec);
501
+ }
502
+
503
+ bool visit_typed_array(const jsoncons::span<const double>& s,
504
+ semantic_tag tag,
505
+ const ser_context& context,
506
+ std::error_code& ec) override
507
+ {
508
+ return destination_->typed_array(s, tag, context, ec);
509
+ }
510
+
511
+ bool visit_begin_multi_dim(const jsoncons::span<const size_t>& shape,
512
+ semantic_tag tag,
513
+ const ser_context& context,
514
+ std::error_code& ec) override
515
+ {
516
+ return destination_->begin_multi_dim(shape, tag, context, ec);
517
+ }
518
+
519
+ bool visit_end_multi_dim(const ser_context& context,
520
+ std::error_code& ec) override
521
+ {
522
+ return destination_->end_multi_dim(context, ec);
523
+ }
524
+
525
+ };
526
+
527
+ template <class From,class To,class Enable=void>
528
+ class json_visitor_adaptor
529
+ {
530
+ };
531
+
532
+ template <class From,class To>
533
+ class json_visitor_adaptor<From,To,typename std::enable_if<traits_extension::is_narrow_character<typename From::char_type>::value &&
534
+ traits_extension::is_narrow_character<typename To::char_type>::value>::type> : public json_visitor_adaptor_base<From,To>
535
+ {
536
+ using supertype = json_visitor_adaptor_base<From,To>;
537
+ using to_char_type = typename To::char_type;
538
+ using from_char_type = typename From::char_type;
539
+ public:
540
+ using typename From::string_view_type;
541
+ using supertype::destination;
542
+ private:
543
+
544
+ // noncopyable
545
+ json_visitor_adaptor(const json_visitor_adaptor&) = delete;
546
+ json_visitor_adaptor& operator=(const json_visitor_adaptor&) = delete;
547
+ public:
548
+ json_visitor_adaptor(To& visitor)
549
+ : supertype(visitor)
550
+ {
551
+ }
552
+
553
+ // moveable
554
+ json_visitor_adaptor(json_visitor_adaptor&&) = default;
555
+ json_visitor_adaptor& operator=(json_visitor_adaptor&&) = default;
556
+
557
+ private:
558
+
559
+ bool visit_key(const string_view_type& key,
560
+ const ser_context& context,
561
+ std::error_code& ec) override
562
+ {
563
+ return destination().key(string_view_type(reinterpret_cast<const to_char_type*>(key.data()),key.size()), context, ec);
564
+ }
565
+
566
+ bool visit_string(const string_view_type& value,
567
+ semantic_tag tag,
568
+ const ser_context& context,
569
+ std::error_code& ec) override
570
+ {
571
+ return destination().string_value(string_view_type(reinterpret_cast<const to_char_type*>(value.data()),value.size()), tag, context, ec);
572
+ }
573
+ };
574
+
575
+ template <class From,class To>
576
+ class json_visitor_adaptor<From,To,typename std::enable_if<!(traits_extension::is_narrow_character<typename From::char_type>::value &&
577
+ traits_extension::is_narrow_character<typename To::char_type>::value)>::type> : public json_visitor_adaptor_base<From,To>
578
+ {
579
+ using supertype = json_visitor_adaptor_base<From,To>;
580
+ public:
581
+ using typename From::string_view_type;
582
+ using supertype::destination;
583
+ private:
584
+
585
+ // noncopyable
586
+ json_visitor_adaptor(const json_visitor_adaptor&) = delete;
587
+ json_visitor_adaptor& operator=(const json_visitor_adaptor&) = delete;
588
+ public:
589
+ json_visitor_adaptor(To& visitor)
590
+ : supertype(visitor)
591
+ {
592
+ }
593
+
594
+ // moveable
595
+ json_visitor_adaptor(json_visitor_adaptor&&) = default;
596
+ json_visitor_adaptor& operator=(json_visitor_adaptor&&) = default;
597
+
598
+ private:
599
+
600
+ bool visit_key(const string_view_type& name,
601
+ const ser_context& context,
602
+ std::error_code& ec) override
603
+ {
604
+ std::basic_string<typename To::char_type> target;
605
+ auto result = unicode_traits::convert(name.data(), name.size(), target, unicode_traits::conv_flags::strict);
606
+ if (result.ec != unicode_traits::conv_errc())
607
+ {
608
+ ec = result.ec;
609
+ }
610
+ return destination().key(target, context, ec);
611
+ }
612
+
613
+ bool visit_string(const string_view_type& value,
614
+ semantic_tag tag,
615
+ const ser_context& context,
616
+ std::error_code& ec) override
617
+ {
618
+ std::basic_string<typename To::char_type> target;
619
+ auto result = unicode_traits::convert(value.data(), value.size(),
620
+ target,unicode_traits::conv_flags::strict);
621
+ if (result.ec != unicode_traits::conv_errc())
622
+ {
623
+ JSONCONS_THROW(ser_error(result.ec));
624
+ }
625
+ return destination().string_value(target, tag, context, ec);
626
+ }
627
+ };
628
+
629
+ template <class From,class To>
630
+ json_visitor_adaptor<From,To> make_json_visitor_adaptor(To& to)
631
+ {
632
+ return json_visitor_adaptor<From, To>(to);
633
+ }
634
+
635
+ using json_filter = basic_json_filter<char>;
636
+ using wjson_filter = basic_json_filter<wchar_t>;
637
+ using rename_object_key_filter = basic_rename_object_key_filter<char>;
638
+ using wrename_object_key_filter = basic_rename_object_key_filter<wchar_t>;
639
+
640
+ #if !defined(JSONCONS_NO_DEPRECATED)
641
+ template <class CharT>
642
+ using basic_json_content_filter = basic_json_filter<CharT>;
643
+ JSONCONS_DEPRECATED_MSG("Instead, use json_filter") typedef basic_json_filter<char> json_content_filter;
644
+ JSONCONS_DEPRECATED_MSG("Instead, use wjson_filter") typedef basic_json_filter<wchar_t> wjson_content_filter;
645
+ JSONCONS_DEPRECATED_MSG("Instead, use rename_object_key_filter") typedef basic_rename_object_key_filter<char> rename_name_filter;
646
+ JSONCONS_DEPRECATED_MSG("Instead, use wrename_object_key_filter") typedef basic_rename_object_key_filter<wchar_t> wrename_name_filter;
647
+ JSONCONS_DEPRECATED_MSG("Instead, use rename_object_key_filter") typedef basic_rename_object_key_filter<char> rename_object_member_filter;
648
+ JSONCONS_DEPRECATED_MSG("Instead, use wrename_object_key_filter") typedef basic_rename_object_key_filter<wchar_t> wrename_object_member_filter;
649
+ #endif
650
+
651
+ }
652
+
653
+ #endif
@@ -0,0 +1,23 @@
1
+ // Copyright 2013 Daniel Parker
2
+ // Distributed under the Boost license, Version 1.0.
3
+ // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4
+
5
+ // See https://github.com/danielaparker/jsoncons for latest version
6
+
7
+ #ifndef JSONCONS_JSON_FWD_HPP
8
+ #define JSONCONS_JSON_FWD_HPP
9
+
10
+ #include <memory> // std::allocator
11
+
12
+ namespace jsoncons {
13
+
14
+ struct sorted_policy;
15
+
16
+ template <class CharT,
17
+ class ImplementationPolicy = sorted_policy,
18
+ class Allocator = std::allocator<CharT>>
19
+ class basic_json;
20
+
21
+ }
22
+
23
+ #endif