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,116 @@
1
+ // Copyright 2017 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_CBOR_CBOR_READER_HPP
8
+ #define JSONCONS_CBOR_CBOR_READER_HPP
9
+
10
+ #include <string>
11
+ #include <vector>
12
+ #include <memory>
13
+ #include <utility> // std::move
14
+ #include <jsoncons/json.hpp>
15
+ #include <jsoncons/source.hpp>
16
+ #include <jsoncons/config/jsoncons_config.hpp>
17
+ #include <jsoncons_ext/cbor/cbor_encoder.hpp>
18
+ #include <jsoncons_ext/cbor/cbor_error.hpp>
19
+ #include <jsoncons_ext/cbor/cbor_detail.hpp>
20
+ #include <jsoncons_ext/cbor/cbor_parser.hpp>
21
+
22
+ namespace jsoncons { namespace cbor {
23
+
24
+ template <class Source,class Allocator=std::allocator<char>>
25
+ class basic_cbor_reader
26
+ {
27
+ using char_type = char;
28
+
29
+ basic_cbor_parser<Source,Allocator> parser_;
30
+ basic_json_visitor2_to_visitor_adaptor<char_type,Allocator> adaptor_;
31
+ json_visitor2& visitor_;
32
+ public:
33
+ template <class Sourceable>
34
+ basic_cbor_reader(Sourceable&& source,
35
+ json_visitor& visitor,
36
+ const Allocator alloc)
37
+ : basic_cbor_reader(std::forward<Sourceable>(source),
38
+ visitor,
39
+ cbor_decode_options(),
40
+ alloc)
41
+ {
42
+ }
43
+
44
+ template <class Sourceable>
45
+ basic_cbor_reader(Sourceable&& source,
46
+ json_visitor& visitor,
47
+ const cbor_decode_options& options = cbor_decode_options(),
48
+ const Allocator alloc=Allocator())
49
+ : parser_(std::forward<Sourceable>(source), options, alloc),
50
+ adaptor_(visitor, alloc), visitor_(adaptor_)
51
+ {
52
+ }
53
+ template <class Sourceable>
54
+ basic_cbor_reader(Sourceable&& source,
55
+ json_visitor2& visitor,
56
+ const Allocator alloc)
57
+ : basic_cbor_reader(std::forward<Sourceable>(source),
58
+ visitor,
59
+ cbor_decode_options(),
60
+ alloc)
61
+ {
62
+ }
63
+
64
+ template <class Sourceable>
65
+ basic_cbor_reader(Sourceable&& source,
66
+ json_visitor2& visitor,
67
+ const cbor_decode_options& options = cbor_decode_options(),
68
+ const Allocator alloc=Allocator())
69
+ : parser_(std::forward<Sourceable>(source), options, alloc),
70
+ visitor_(visitor)
71
+ {
72
+ }
73
+
74
+ void read()
75
+ {
76
+ std::error_code ec;
77
+ read(ec);
78
+ if (ec)
79
+ {
80
+ JSONCONS_THROW(ser_error(ec,line(),column()));
81
+ }
82
+ }
83
+
84
+ void read(std::error_code& ec)
85
+ {
86
+ parser_.reset();
87
+ parser_.parse(visitor_, ec);
88
+ if (ec)
89
+ {
90
+ return;
91
+ }
92
+ }
93
+
94
+ std::size_t line() const
95
+ {
96
+ return parser_.line();
97
+ }
98
+
99
+ std::size_t column() const
100
+ {
101
+ return parser_.column();
102
+ }
103
+ };
104
+
105
+ using cbor_stream_reader = basic_cbor_reader<jsoncons::binary_stream_source>;
106
+
107
+ using cbor_bytes_reader = basic_cbor_reader<jsoncons::bytes_source>;
108
+
109
+ #if !defined(JSONCONS_NO_DEPRECATED)
110
+ JSONCONS_DEPRECATED_MSG("Instead, use cbor_stream_reader") typedef cbor_stream_reader cbor_reader;
111
+ JSONCONS_DEPRECATED_MSG("Instead, use cbor_bytes_reader") typedef cbor_bytes_reader cbor_buffer_reader;
112
+ #endif
113
+
114
+ }}
115
+
116
+ #endif
@@ -0,0 +1,203 @@
1
+ // Copyright 2017 Daniel Parkerstd
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_CBOR_DECODE_CBOR_HPP
8
+ #define JSONCONS_CBOR_DECODE_CBOR_HPP
9
+
10
+ #include <string>
11
+ #include <vector>
12
+ #include <memory>
13
+ #include <type_traits> // std::enable_if
14
+ #include <istream> // std::basic_istream
15
+ #include <jsoncons/json.hpp>
16
+ #include <jsoncons/json_filter.hpp>
17
+ #include <jsoncons/decode_traits.hpp>
18
+ #include <jsoncons/config/jsoncons_config.hpp>
19
+ #include <jsoncons_ext/cbor/cbor_reader.hpp>
20
+ #include <jsoncons_ext/cbor/cbor_cursor.hpp>
21
+
22
+ namespace jsoncons {
23
+ namespace cbor {
24
+
25
+ template<class T, class Source>
26
+ typename std::enable_if<traits_extension::is_basic_json<T>::value &&
27
+ traits_extension::is_byte_sequence<Source>::value,T>::type
28
+ decode_cbor(const Source& v,
29
+ const cbor_decode_options& options = cbor_decode_options())
30
+ {
31
+ jsoncons::json_decoder<T> decoder;
32
+ auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
33
+ basic_cbor_reader<jsoncons::bytes_source> reader(v, adaptor, options);
34
+ reader.read();
35
+ if (!decoder.is_valid())
36
+ {
37
+ JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
38
+ }
39
+ return decoder.get_result();
40
+ }
41
+
42
+ template<class T, class Source>
43
+ typename std::enable_if<!traits_extension::is_basic_json<T>::value &&
44
+ traits_extension::is_byte_sequence<Source>::value,T>::type
45
+ decode_cbor(const Source& v,
46
+ const cbor_decode_options& options = cbor_decode_options())
47
+ {
48
+ basic_cbor_cursor<bytes_source> cursor(v, options);
49
+ json_decoder<basic_json<char,sorted_policy>> decoder{};
50
+
51
+ std::error_code ec;
52
+ T val = decode_traits<T,char>::decode(cursor, decoder, ec);
53
+ if (ec)
54
+ {
55
+ JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
56
+ }
57
+ return val;
58
+ }
59
+
60
+ template<class T>
61
+ typename std::enable_if<traits_extension::is_basic_json<T>::value,T>::type
62
+ decode_cbor(std::istream& is,
63
+ const cbor_decode_options& options = cbor_decode_options())
64
+ {
65
+ jsoncons::json_decoder<T> decoder;
66
+ auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
67
+ cbor_stream_reader reader(is, adaptor, options);
68
+ reader.read();
69
+ if (!decoder.is_valid())
70
+ {
71
+ JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
72
+ }
73
+ return decoder.get_result();
74
+ }
75
+
76
+ template<class T>
77
+ typename std::enable_if<!traits_extension::is_basic_json<T>::value,T>::type
78
+ decode_cbor(std::istream& is,
79
+ const cbor_decode_options& options = cbor_decode_options())
80
+ {
81
+ basic_cbor_cursor<binary_stream_source> cursor(is, options);
82
+ json_decoder<basic_json<char,sorted_policy>> decoder{};
83
+
84
+ std::error_code ec;
85
+ T val = decode_traits<T,char>::decode(cursor, decoder, ec);
86
+ if (ec)
87
+ {
88
+ JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
89
+ }
90
+ return val;
91
+ }
92
+
93
+ template<class T, class InputIt>
94
+ typename std::enable_if<traits_extension::is_basic_json<T>::value,T>::type
95
+ decode_cbor(InputIt first, InputIt last,
96
+ const cbor_decode_options& options = cbor_decode_options())
97
+ {
98
+ jsoncons::json_decoder<T> decoder;
99
+ auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
100
+ basic_cbor_reader<binary_iterator_source<InputIt>> reader(binary_iterator_source<InputIt>(first, last), adaptor, options);
101
+ reader.read();
102
+ if (!decoder.is_valid())
103
+ {
104
+ JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
105
+ }
106
+ return decoder.get_result();
107
+ }
108
+
109
+ template<class T, class InputIt>
110
+ typename std::enable_if<!traits_extension::is_basic_json<T>::value,T>::type
111
+ decode_cbor(InputIt first, InputIt last,
112
+ const cbor_decode_options& options = cbor_decode_options())
113
+ {
114
+ basic_cbor_cursor<binary_iterator_source<InputIt>> cursor(binary_iterator_source<InputIt>(first, last), options);
115
+ json_decoder<basic_json<char,sorted_policy>> decoder{};
116
+
117
+ std::error_code ec;
118
+ T val = decode_traits<T,char>::decode(cursor, decoder, ec);
119
+ if (ec)
120
+ {
121
+ JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
122
+ }
123
+ return val;
124
+ }
125
+
126
+ // With leading allocator parameter
127
+
128
+ template<class T, class Source, class TempAllocator>
129
+ typename std::enable_if<traits_extension::is_basic_json<T>::value &&
130
+ traits_extension::is_byte_sequence<Source>::value,T>::type
131
+ decode_cbor(temp_allocator_arg_t, const TempAllocator& temp_alloc,
132
+ const Source& v,
133
+ const cbor_decode_options& options = cbor_decode_options())
134
+ {
135
+ json_decoder<T,TempAllocator> decoder(temp_alloc);
136
+ auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
137
+ basic_cbor_reader<jsoncons::bytes_source,TempAllocator> reader(v, adaptor, options, temp_alloc);
138
+ reader.read();
139
+ if (!decoder.is_valid())
140
+ {
141
+ JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
142
+ }
143
+ return decoder.get_result();
144
+ }
145
+
146
+ template<class T, class Source, class TempAllocator>
147
+ typename std::enable_if<!traits_extension::is_basic_json<T>::value &&
148
+ traits_extension::is_byte_sequence<Source>::value,T>::type
149
+ decode_cbor(temp_allocator_arg_t, const TempAllocator& temp_alloc,
150
+ const Source& v,
151
+ const cbor_decode_options& options = cbor_decode_options())
152
+ {
153
+ basic_cbor_cursor<bytes_source,TempAllocator> cursor(v, options, temp_alloc);
154
+ json_decoder<basic_json<char,sorted_policy,TempAllocator>,TempAllocator> decoder(temp_alloc, temp_alloc);
155
+
156
+ std::error_code ec;
157
+ T val = decode_traits<T,char>::decode(cursor, decoder, ec);
158
+ if (ec)
159
+ {
160
+ JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
161
+ }
162
+ return val;
163
+ }
164
+
165
+ template<class T,class TempAllocator>
166
+ typename std::enable_if<traits_extension::is_basic_json<T>::value,T>::type
167
+ decode_cbor(temp_allocator_arg_t, const TempAllocator& temp_alloc,
168
+ std::istream& is,
169
+ const cbor_decode_options& options = cbor_decode_options())
170
+ {
171
+ json_decoder<T,TempAllocator> decoder(temp_alloc);
172
+ auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
173
+ basic_cbor_reader<jsoncons::binary_stream_source,TempAllocator> reader(is, adaptor, options, temp_alloc);
174
+ reader.read();
175
+ if (!decoder.is_valid())
176
+ {
177
+ JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
178
+ }
179
+ return decoder.get_result();
180
+ }
181
+
182
+ template<class T,class TempAllocator>
183
+ typename std::enable_if<!traits_extension::is_basic_json<T>::value,T>::type
184
+ decode_cbor(temp_allocator_arg_t, const TempAllocator& temp_alloc,
185
+ std::istream& is,
186
+ const cbor_decode_options& options = cbor_decode_options())
187
+ {
188
+ basic_cbor_cursor<binary_stream_source,TempAllocator> cursor(is, options, temp_alloc);
189
+ json_decoder<basic_json<char,sorted_policy,TempAllocator>,TempAllocator> decoder(temp_alloc, temp_alloc);
190
+
191
+ std::error_code ec;
192
+ T val = decode_traits<T,char>::decode(cursor, decoder, ec);
193
+ if (ec)
194
+ {
195
+ JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
196
+ }
197
+ return val;
198
+ }
199
+
200
+ } // namespace cbor
201
+ } // namespace jsoncons
202
+
203
+ #endif
@@ -0,0 +1,151 @@
1
+ // Copyright 2017 Daniel Parkerstd
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_CBOR_ENCODE_CBOR_HPP
8
+ #define JSONCONS_CBOR_ENCODE_CBOR_HPP
9
+
10
+ #include <string>
11
+ #include <vector>
12
+ #include <memory>
13
+ #include <type_traits> // std::enable_if
14
+ #include <istream> // std::basic_istream
15
+ #include <jsoncons/json.hpp>
16
+ #include <jsoncons/json_filter.hpp>
17
+ #include <jsoncons/config/jsoncons_config.hpp>
18
+ #include <jsoncons/encode_traits.hpp>
19
+ #include <jsoncons_ext/cbor/cbor_encoder.hpp>
20
+
21
+ namespace jsoncons {
22
+ namespace cbor {
23
+
24
+ // to bytes
25
+
26
+ template<class T, class Container>
27
+ typename std::enable_if<traits_extension::is_basic_json<T>::value &&
28
+ traits_extension::is_back_insertable_byte_container<Container>::value,void>::type
29
+ encode_cbor(const T& j,
30
+ Container& v,
31
+ const cbor_encode_options& options = cbor_encode_options())
32
+ {
33
+ using char_type = typename T::char_type;
34
+ basic_cbor_encoder<jsoncons::bytes_sink<Container>> encoder(v, options);
35
+ auto adaptor = make_json_visitor_adaptor<basic_json_visitor<char_type>>(encoder);
36
+ j.dump(adaptor);
37
+ }
38
+
39
+ template<class T, class Container>
40
+ typename std::enable_if<!traits_extension::is_basic_json<T>::value &&
41
+ traits_extension::is_back_insertable_byte_container<Container>::value,void>::type
42
+ encode_cbor(const T& val, Container& v,
43
+ const cbor_encode_options& options = cbor_encode_options())
44
+ {
45
+ basic_cbor_encoder<jsoncons::bytes_sink<Container>> encoder(v, options);
46
+ std::error_code ec;
47
+ encode_traits<T,char>::encode(val, encoder, json(), ec);
48
+ if (ec)
49
+ {
50
+ JSONCONS_THROW(ser_error(ec));
51
+ }
52
+ }
53
+
54
+ // stream
55
+
56
+ template<class T>
57
+ typename std::enable_if<traits_extension::is_basic_json<T>::value,void>::type
58
+ encode_cbor(const T& j,
59
+ std::ostream& os,
60
+ const cbor_encode_options& options = cbor_encode_options())
61
+ {
62
+ using char_type = typename T::char_type;
63
+ cbor_stream_encoder encoder(os, options);
64
+ auto adaptor = make_json_visitor_adaptor<basic_json_visitor<char_type>>(encoder);
65
+ j.dump(adaptor);
66
+ }
67
+
68
+ template<class T>
69
+ typename std::enable_if<!traits_extension::is_basic_json<T>::value,void>::type
70
+ encode_cbor(const T& val,
71
+ std::ostream& os,
72
+ const cbor_encode_options& options = cbor_encode_options())
73
+ {
74
+ cbor_stream_encoder encoder(os, options);
75
+ std::error_code ec;
76
+ encode_traits<T,char>::encode(val, encoder, json(), ec);
77
+ if (ec)
78
+ {
79
+ JSONCONS_THROW(ser_error(ec));
80
+ }
81
+ }
82
+
83
+ // temp_allocator_arg
84
+
85
+ // to bytes
86
+
87
+ template<class T, class Container, class TempAllocator>
88
+ typename std::enable_if<traits_extension::is_basic_json<T>::value &&
89
+ traits_extension::is_back_insertable_byte_container<Container>::value,void>::type
90
+ encode_cbor(temp_allocator_arg_t, const TempAllocator& temp_alloc,
91
+ const T& j,
92
+ Container& v,
93
+ const cbor_encode_options& options = cbor_encode_options())
94
+ {
95
+ using char_type = typename T::char_type;
96
+ basic_cbor_encoder<bytes_sink<Container>,TempAllocator> encoder(v, options, temp_alloc);
97
+ auto adaptor = make_json_visitor_adaptor<basic_json_visitor<char_type>>(encoder);
98
+ j.dump(adaptor);
99
+ }
100
+
101
+ template<class T, class Container, class TempAllocator>
102
+ typename std::enable_if<!traits_extension::is_basic_json<T>::value &&
103
+ traits_extension::is_back_insertable_byte_container<Container>::value,void>::type
104
+ encode_cbor(temp_allocator_arg_t, const TempAllocator& temp_alloc,
105
+ const T& val,
106
+ Container& v,
107
+ const cbor_encode_options& options = cbor_encode_options())
108
+ {
109
+ basic_cbor_encoder<jsoncons::bytes_sink<Container>,TempAllocator> encoder(v, options, temp_alloc);
110
+ std::error_code ec;
111
+ encode_traits<T,char>::encode(val, encoder, json(), ec);
112
+ if (ec)
113
+ {
114
+ JSONCONS_THROW(ser_error(ec));
115
+ }
116
+ }
117
+
118
+ // stream
119
+
120
+ template<class T,class TempAllocator>
121
+ typename std::enable_if<traits_extension::is_basic_json<T>::value,void>::type
122
+ encode_cbor(temp_allocator_arg_t, const TempAllocator& temp_alloc,
123
+ const T& j,
124
+ std::ostream& os,
125
+ const cbor_encode_options& options = cbor_encode_options())
126
+ {
127
+ using char_type = typename T::char_type;
128
+ basic_cbor_encoder<binary_stream_sink,TempAllocator> encoder(os, options, temp_alloc);
129
+ auto adaptor = make_json_visitor_adaptor<basic_json_visitor<char_type>>(encoder);
130
+ j.dump(adaptor);
131
+ }
132
+
133
+ template<class T,class TempAllocator>
134
+ typename std::enable_if<!traits_extension::is_basic_json<T>::value,void>::type
135
+ encode_cbor(temp_allocator_arg_t, const TempAllocator& temp_alloc,
136
+ const T& val,
137
+ std::ostream& os,
138
+ const cbor_encode_options& options = cbor_encode_options())
139
+ {
140
+ std::error_code ec;
141
+ encode_cbor(temp_allocator_arg, temp_alloc, val, os, options, ec);
142
+ if (ec)
143
+ {
144
+ JSONCONS_THROW(ser_error(ec));
145
+ }
146
+ }
147
+
148
+ } // namespace cbor
149
+ } // namespace jsoncons
150
+
151
+ #endif
@@ -0,0 +1,17 @@
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_CSV_CSV_HPP
8
+ #define JSONCONS_CSV_CSV_HPP
9
+
10
+ #include <jsoncons_ext/csv/csv_options.hpp>
11
+ #include <jsoncons_ext/csv/csv_reader.hpp>
12
+ #include <jsoncons_ext/csv/csv_encoder.hpp>
13
+ #include <jsoncons_ext/csv/csv_cursor.hpp>
14
+ #include <jsoncons_ext/csv/decode_csv.hpp>
15
+ #include <jsoncons_ext/csv/encode_csv.hpp>
16
+
17
+ #endif