jsoncons 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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