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.
- checksums.yaml +7 -0
- data/ext/jsoncons/extconf.rb +43 -0
- data/ext/jsoncons/jsoncons.cpp +161 -0
- data/ext/jsoncons/jsoncons.h +10 -0
- data/jsoncons.gemspec +44 -0
- data/lib/jsoncons/jsoncons/examples/input/address-book.json +13 -0
- data/lib/jsoncons/jsoncons/examples/input/books.json +28 -0
- data/lib/jsoncons/jsoncons/examples/input/countries.json +7 -0
- data/lib/jsoncons/jsoncons/examples/input/employees.json +30 -0
- data/lib/jsoncons/jsoncons/examples/input/jsonschema/name.json +15 -0
- data/lib/jsoncons/jsoncons/examples/input/multiple-json-objects.json +3 -0
- data/lib/jsoncons/jsoncons/examples/input/sales.csv +6 -0
- data/lib/jsoncons/jsoncons/examples/input/store.json +28 -0
- data/lib/jsoncons/jsoncons/examples/input/tasks.csv +6 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/allocator_holder.hpp +38 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/basic_json.hpp +5905 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/bigint.hpp +1611 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/byte_string.hpp +820 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/config/binary_config.hpp +226 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/config/compiler_support.hpp +375 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/config/jsoncons_config.hpp +309 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/config/version.hpp +40 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/conv_error.hpp +218 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/decode_json.hpp +209 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/decode_traits.hpp +651 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/endian.hpp +44 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/grisu3.hpp +312 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/optional.hpp +483 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/parse_number.hpp +1133 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/span.hpp +188 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/string_view.hpp +537 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/string_wrapper.hpp +370 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/detail/write_number.hpp +567 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/encode_json.hpp +315 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/encode_traits.hpp +378 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json.hpp +18 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_array.hpp +324 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_content_handler.hpp +12 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_cursor.hpp +448 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_decoder.hpp +420 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_encoder.hpp +1587 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_error.hpp +156 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_exception.hpp +241 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_filter.hpp +653 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_fwd.hpp +23 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_object.hpp +1772 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_options.hpp +862 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_parser.hpp +2900 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_reader.hpp +731 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_traits_macros.hpp +1072 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_traits_macros_deprecated.hpp +144 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_type.hpp +206 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_type_traits.hpp +1830 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_visitor.hpp +1560 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/json_visitor2.hpp +2079 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/pretty_print.hpp +89 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/ser_context.hpp +62 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/sink.hpp +289 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/source.hpp +777 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/source_adaptor.hpp +148 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/staj2_cursor.hpp +1189 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/staj_cursor.hpp +1254 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/staj_iterator.hpp +449 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/tag_type.hpp +245 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/text_source_adaptor.hpp +144 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/traits_extension.hpp +884 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/typed_array_view.hpp +250 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/unicode_traits.hpp +1330 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/uri.hpp +635 -0
- data/lib/jsoncons/jsoncons/include/jsoncons/value_converter.hpp +340 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson.hpp +23 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_cursor.hpp +320 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_decimal128.hpp +865 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_encoder.hpp +585 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_error.hpp +103 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_oid.hpp +245 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_options.hpp +75 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_parser.hpp +645 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_reader.hpp +92 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/bson_type.hpp +44 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/decode_bson.hpp +201 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/bson/encode_bson.hpp +144 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor.hpp +26 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_cursor.hpp +351 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_cursor2.hpp +265 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_detail.hpp +93 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_encoder.hpp +1766 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_error.hpp +105 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_options.hpp +113 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_parser.hpp +1942 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/cbor_reader.hpp +116 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/decode_cbor.hpp +203 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/cbor/encode_cbor.hpp +151 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv.hpp +17 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_cursor.hpp +358 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_encoder.hpp +954 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_error.hpp +85 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_options.hpp +973 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_parser.hpp +2099 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_reader.hpp +348 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/csv_serializer.hpp +12 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/decode_csv.hpp +208 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/csv/encode_csv.hpp +122 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jmespath/jmespath.hpp +5215 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jmespath/jmespath_error.hpp +215 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpatch/jsonpatch.hpp +579 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpatch/jsonpatch_error.hpp +121 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/expression.hpp +3329 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/flatten.hpp +432 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/json_location.hpp +445 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/json_query.hpp +115 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath.hpp +13 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_error.hpp +240 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_expression.hpp +2612 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpath/jsonpath_selector.hpp +1322 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpointer/jsonpointer.hpp +1577 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonpointer/jsonpointer_error.hpp +119 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/format_validator.hpp +968 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/json_validator.hpp +120 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema.hpp +13 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema_error.hpp +105 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/jsonschema_version.hpp +18 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/keyword_validator.hpp +1745 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/keyword_validator_factory.hpp +556 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_draft7.hpp +198 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_location.hpp +200 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/schema_version.hpp +35 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/jsonschema/subschema.hpp +144 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/mergepatch/mergepatch.hpp +103 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/decode_msgpack.hpp +202 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/encode_msgpack.hpp +142 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack.hpp +24 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_cursor.hpp +343 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_cursor2.hpp +259 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_encoder.hpp +753 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_error.hpp +94 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_options.hpp +74 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_parser.hpp +748 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_reader.hpp +116 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/msgpack/msgpack_type.hpp +63 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/decode_ubjson.hpp +201 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/encode_ubjson.hpp +142 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson.hpp +23 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_cursor.hpp +307 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_encoder.hpp +502 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_error.hpp +100 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_options.hpp +87 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_parser.hpp +880 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_reader.hpp +92 -0
- data/lib/jsoncons/jsoncons/include/jsoncons_ext/ubjson/ubjson_type.hpp +43 -0
- data/lib/jsoncons/version.rb +5 -0
- data/lib/jsoncons.rb +33 -0
- data/test/jsoncons_test.rb +108 -0
- data/test/test_helper.rb +7 -0
- metadata +268 -0
|
@@ -0,0 +1,202 @@
|
|
|
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_MSGPACK_DECODE_MSGPACK_HPP
|
|
8
|
+
#define JSONCONS_MSGPACK_DECODE_MSGPACK_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/config/jsoncons_config.hpp>
|
|
17
|
+
#include <jsoncons_ext/msgpack/msgpack_encoder.hpp>
|
|
18
|
+
#include <jsoncons_ext/msgpack/msgpack_reader.hpp>
|
|
19
|
+
#include <jsoncons_ext/msgpack/msgpack_cursor.hpp>
|
|
20
|
+
|
|
21
|
+
namespace jsoncons {
|
|
22
|
+
namespace msgpack {
|
|
23
|
+
|
|
24
|
+
template<class T, class Source>
|
|
25
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value &&
|
|
26
|
+
traits_extension::is_byte_sequence<Source>::value,T>::type
|
|
27
|
+
decode_msgpack(const Source& v,
|
|
28
|
+
const msgpack_decode_options& options = msgpack_decode_options())
|
|
29
|
+
{
|
|
30
|
+
jsoncons::json_decoder<T> decoder;
|
|
31
|
+
auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
|
|
32
|
+
basic_msgpack_reader<jsoncons::bytes_source> reader(v, adaptor, options);
|
|
33
|
+
reader.read();
|
|
34
|
+
if (!decoder.is_valid())
|
|
35
|
+
{
|
|
36
|
+
JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
|
|
37
|
+
}
|
|
38
|
+
return decoder.get_result();
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
template<class T, class Source>
|
|
42
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value &&
|
|
43
|
+
traits_extension::is_byte_sequence<Source>::value,T>::type
|
|
44
|
+
decode_msgpack(const Source& v,
|
|
45
|
+
const msgpack_decode_options& options = msgpack_decode_options())
|
|
46
|
+
{
|
|
47
|
+
basic_msgpack_cursor<bytes_source> cursor(v, options);
|
|
48
|
+
json_decoder<basic_json<char,sorted_policy>> decoder{};
|
|
49
|
+
|
|
50
|
+
std::error_code ec;
|
|
51
|
+
T val = decode_traits<T,char>::decode(cursor, decoder, ec);
|
|
52
|
+
if (ec)
|
|
53
|
+
{
|
|
54
|
+
JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
|
|
55
|
+
}
|
|
56
|
+
return val;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
template<class T>
|
|
60
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value,T>::type
|
|
61
|
+
decode_msgpack(std::istream& is,
|
|
62
|
+
const msgpack_decode_options& options = msgpack_decode_options())
|
|
63
|
+
{
|
|
64
|
+
jsoncons::json_decoder<T> decoder;
|
|
65
|
+
auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
|
|
66
|
+
msgpack_stream_reader reader(is, adaptor, options);
|
|
67
|
+
reader.read();
|
|
68
|
+
if (!decoder.is_valid())
|
|
69
|
+
{
|
|
70
|
+
JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
|
|
71
|
+
}
|
|
72
|
+
return decoder.get_result();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
template<class T>
|
|
76
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value,T>::type
|
|
77
|
+
decode_msgpack(std::istream& is,
|
|
78
|
+
const msgpack_decode_options& options = msgpack_decode_options())
|
|
79
|
+
{
|
|
80
|
+
basic_msgpack_cursor<binary_stream_source> cursor(is, options);
|
|
81
|
+
json_decoder<basic_json<char,sorted_policy>> decoder{};
|
|
82
|
+
|
|
83
|
+
std::error_code ec;
|
|
84
|
+
T val = decode_traits<T,char>::decode(cursor, decoder, ec);
|
|
85
|
+
if (ec)
|
|
86
|
+
{
|
|
87
|
+
JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
|
|
88
|
+
}
|
|
89
|
+
return val;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
template<class T, class InputIt>
|
|
93
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value,T>::type
|
|
94
|
+
decode_msgpack(InputIt first, InputIt last,
|
|
95
|
+
const msgpack_decode_options& options = msgpack_decode_options())
|
|
96
|
+
{
|
|
97
|
+
jsoncons::json_decoder<T> decoder;
|
|
98
|
+
auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
|
|
99
|
+
basic_msgpack_reader<binary_iterator_source<InputIt>> reader(binary_iterator_source<InputIt>(first, last), adaptor, options);
|
|
100
|
+
reader.read();
|
|
101
|
+
if (!decoder.is_valid())
|
|
102
|
+
{
|
|
103
|
+
JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
|
|
104
|
+
}
|
|
105
|
+
return decoder.get_result();
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
template<class T, class InputIt>
|
|
109
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value,T>::type
|
|
110
|
+
decode_msgpack(InputIt first, InputIt last,
|
|
111
|
+
const msgpack_decode_options& options = msgpack_decode_options())
|
|
112
|
+
{
|
|
113
|
+
basic_msgpack_cursor<binary_iterator_source<InputIt>> cursor(binary_iterator_source<InputIt>(first, last), options);
|
|
114
|
+
json_decoder<basic_json<char,sorted_policy>> decoder{};
|
|
115
|
+
|
|
116
|
+
std::error_code ec;
|
|
117
|
+
T val = decode_traits<T,char>::decode(cursor, decoder, ec);
|
|
118
|
+
if (ec)
|
|
119
|
+
{
|
|
120
|
+
JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
|
|
121
|
+
}
|
|
122
|
+
return val;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// With leading allocator parameter
|
|
126
|
+
|
|
127
|
+
template<class T, class Source, class TempAllocator>
|
|
128
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value &&
|
|
129
|
+
traits_extension::is_byte_sequence<Source>::value,T>::type
|
|
130
|
+
decode_msgpack(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
131
|
+
const Source& v,
|
|
132
|
+
const msgpack_decode_options& options = msgpack_decode_options())
|
|
133
|
+
{
|
|
134
|
+
json_decoder<T,TempAllocator> decoder(temp_alloc);
|
|
135
|
+
auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
|
|
136
|
+
basic_msgpack_reader<jsoncons::bytes_source,TempAllocator> reader(v, adaptor, options, temp_alloc);
|
|
137
|
+
reader.read();
|
|
138
|
+
if (!decoder.is_valid())
|
|
139
|
+
{
|
|
140
|
+
JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
|
|
141
|
+
}
|
|
142
|
+
return decoder.get_result();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
template<class T, class Source, class TempAllocator>
|
|
146
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value &&
|
|
147
|
+
traits_extension::is_byte_sequence<Source>::value,T>::type
|
|
148
|
+
decode_msgpack(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
149
|
+
const Source& v,
|
|
150
|
+
const msgpack_decode_options& options = msgpack_decode_options())
|
|
151
|
+
{
|
|
152
|
+
basic_msgpack_cursor<bytes_source,TempAllocator> cursor(v, options, temp_alloc);
|
|
153
|
+
json_decoder<basic_json<char,sorted_policy,TempAllocator>,TempAllocator> decoder(temp_alloc, temp_alloc);
|
|
154
|
+
|
|
155
|
+
std::error_code ec;
|
|
156
|
+
T val = decode_traits<T,char>::decode(cursor, decoder, ec);
|
|
157
|
+
if (ec)
|
|
158
|
+
{
|
|
159
|
+
JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
|
|
160
|
+
}
|
|
161
|
+
return val;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
template<class T,class TempAllocator>
|
|
165
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value,T>::type
|
|
166
|
+
decode_msgpack(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
167
|
+
std::istream& is,
|
|
168
|
+
const msgpack_decode_options& options = msgpack_decode_options())
|
|
169
|
+
{
|
|
170
|
+
json_decoder<T,TempAllocator> decoder(temp_alloc);
|
|
171
|
+
auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
|
|
172
|
+
basic_msgpack_reader<jsoncons::binary_stream_source,TempAllocator> reader(is, adaptor, options, temp_alloc);
|
|
173
|
+
reader.read();
|
|
174
|
+
if (!decoder.is_valid())
|
|
175
|
+
{
|
|
176
|
+
JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
|
|
177
|
+
}
|
|
178
|
+
return decoder.get_result();
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
template<class T,class TempAllocator>
|
|
182
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value,T>::type
|
|
183
|
+
decode_msgpack(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
184
|
+
std::istream& is,
|
|
185
|
+
const msgpack_decode_options& options = msgpack_decode_options())
|
|
186
|
+
{
|
|
187
|
+
basic_msgpack_cursor<binary_stream_source,TempAllocator> cursor(is, options, temp_alloc);
|
|
188
|
+
json_decoder<basic_json<char,sorted_policy,TempAllocator>,TempAllocator> decoder(temp_alloc, temp_alloc);
|
|
189
|
+
|
|
190
|
+
std::error_code ec;
|
|
191
|
+
T val = decode_traits<T,char>::decode(cursor, decoder, ec);
|
|
192
|
+
if (ec)
|
|
193
|
+
{
|
|
194
|
+
JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
|
|
195
|
+
}
|
|
196
|
+
return val;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
} // msgpack
|
|
200
|
+
} // jsoncons
|
|
201
|
+
|
|
202
|
+
#endif
|
|
@@ -0,0 +1,142 @@
|
|
|
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_MSGPACK_ENCODE_MSGPACK_HPP
|
|
8
|
+
#define JSONCONS_MSGPACK_ENCODE_MSGPACK_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/config/jsoncons_config.hpp>
|
|
17
|
+
#include <jsoncons_ext/msgpack/msgpack_encoder.hpp>
|
|
18
|
+
#include <jsoncons_ext/msgpack/msgpack_reader.hpp>
|
|
19
|
+
|
|
20
|
+
namespace jsoncons {
|
|
21
|
+
namespace msgpack {
|
|
22
|
+
|
|
23
|
+
template<class T, class Container>
|
|
24
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value &&
|
|
25
|
+
traits_extension::is_back_insertable_byte_container<Container>::value,void>::type
|
|
26
|
+
encode_msgpack(const T& j,
|
|
27
|
+
Container& v,
|
|
28
|
+
const msgpack_encode_options& options = msgpack_encode_options())
|
|
29
|
+
{
|
|
30
|
+
using char_type = typename T::char_type;
|
|
31
|
+
basic_msgpack_encoder<jsoncons::bytes_sink<Container>> encoder(v, options);
|
|
32
|
+
auto adaptor = make_json_visitor_adaptor<basic_json_visitor<char_type>>(encoder);
|
|
33
|
+
j.dump(adaptor);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
template<class T, class Container>
|
|
37
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value &&
|
|
38
|
+
traits_extension::is_back_insertable_byte_container<Container>::value,void>::type
|
|
39
|
+
encode_msgpack(const T& val,
|
|
40
|
+
Container& v,
|
|
41
|
+
const msgpack_encode_options& options = msgpack_encode_options())
|
|
42
|
+
{
|
|
43
|
+
basic_msgpack_encoder<jsoncons::bytes_sink<Container>> encoder(v, options);
|
|
44
|
+
std::error_code ec;
|
|
45
|
+
encode_traits<T,char>::encode(val, encoder, json(), ec);
|
|
46
|
+
if (ec)
|
|
47
|
+
{
|
|
48
|
+
JSONCONS_THROW(ser_error(ec));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
template<class T>
|
|
53
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value,void>::type
|
|
54
|
+
encode_msgpack(const T& j,
|
|
55
|
+
std::ostream& os,
|
|
56
|
+
const msgpack_encode_options& options = msgpack_encode_options())
|
|
57
|
+
{
|
|
58
|
+
using char_type = typename T::char_type;
|
|
59
|
+
msgpack_stream_encoder encoder(os, options);
|
|
60
|
+
auto adaptor = make_json_visitor_adaptor<basic_json_visitor<char_type>>(encoder);
|
|
61
|
+
j.dump(adaptor);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
template<class T>
|
|
65
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value,void>::type
|
|
66
|
+
encode_msgpack(const T& val,
|
|
67
|
+
std::ostream& os,
|
|
68
|
+
const msgpack_encode_options& options = msgpack_encode_options())
|
|
69
|
+
{
|
|
70
|
+
msgpack_stream_encoder encoder(os, options);
|
|
71
|
+
std::error_code ec;
|
|
72
|
+
encode_traits<T,char>::encode(val, encoder, json(), ec);
|
|
73
|
+
if (ec)
|
|
74
|
+
{
|
|
75
|
+
JSONCONS_THROW(ser_error(ec));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// with temp_allocator_arg_t
|
|
80
|
+
|
|
81
|
+
template<class T, class Container, class TempAllocator>
|
|
82
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value &&
|
|
83
|
+
traits_extension::is_back_insertable_byte_container<Container>::value,void>::type
|
|
84
|
+
encode_msgpack(temp_allocator_arg_t, const TempAllocator& temp_alloc, const T& j,
|
|
85
|
+
Container& v,
|
|
86
|
+
const msgpack_encode_options& options = msgpack_encode_options())
|
|
87
|
+
{
|
|
88
|
+
using char_type = typename T::char_type;
|
|
89
|
+
basic_msgpack_encoder<jsoncons::bytes_sink<Container>,TempAllocator> encoder(v, options, temp_alloc);
|
|
90
|
+
auto adaptor = make_json_visitor_adaptor<basic_json_visitor<char_type>>(encoder);
|
|
91
|
+
j.dump(adaptor);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
template<class T, class Container, class TempAllocator>
|
|
95
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value &&
|
|
96
|
+
traits_extension::is_back_insertable_byte_container<Container>::value,void>::type
|
|
97
|
+
encode_msgpack(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
98
|
+
const T& val, Container& v,
|
|
99
|
+
const msgpack_encode_options& options = msgpack_encode_options())
|
|
100
|
+
{
|
|
101
|
+
basic_msgpack_encoder<jsoncons::bytes_sink<Container>,TempAllocator> encoder(v, options, temp_alloc);
|
|
102
|
+
std::error_code ec;
|
|
103
|
+
encode_traits<T,char>::encode(val, encoder, json(), ec);
|
|
104
|
+
if (ec)
|
|
105
|
+
{
|
|
106
|
+
JSONCONS_THROW(ser_error(ec));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
template<class T,class TempAllocator>
|
|
111
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value,void>::type
|
|
112
|
+
encode_msgpack(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
113
|
+
const T& j,
|
|
114
|
+
std::ostream& os,
|
|
115
|
+
const msgpack_encode_options& options = msgpack_encode_options())
|
|
116
|
+
{
|
|
117
|
+
using char_type = typename T::char_type;
|
|
118
|
+
basic_msgpack_encoder<jsoncons::binary_stream_sink,TempAllocator> encoder(os, options, temp_alloc);
|
|
119
|
+
auto adaptor = make_json_visitor_adaptor<basic_json_visitor<char_type>>(encoder);
|
|
120
|
+
j.dump(adaptor);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
template<class T,class TempAllocator>
|
|
124
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value,void>::type
|
|
125
|
+
encode_msgpack(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
126
|
+
const T& val,
|
|
127
|
+
std::ostream& os,
|
|
128
|
+
const msgpack_encode_options& options = msgpack_encode_options())
|
|
129
|
+
{
|
|
130
|
+
basic_msgpack_encoder<jsoncons::binary_stream_sink,TempAllocator> encoder(os, options, temp_alloc);
|
|
131
|
+
std::error_code ec;
|
|
132
|
+
encode_traits<T,char>::encode(val, encoder, json(), ec);
|
|
133
|
+
if (ec)
|
|
134
|
+
{
|
|
135
|
+
JSONCONS_THROW(ser_error(ec));
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
} // msgpack
|
|
140
|
+
} // jsoncons
|
|
141
|
+
|
|
142
|
+
#endif
|
|
@@ -0,0 +1,24 @@
|
|
|
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_MSGPACK_MSGPACK_HPP
|
|
8
|
+
#define JSONCONS_MSGPACK_MSGPACK_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/config/jsoncons_config.hpp>
|
|
17
|
+
#include <jsoncons_ext/msgpack/msgpack_encoder.hpp>
|
|
18
|
+
#include <jsoncons_ext/msgpack/msgpack_reader.hpp>
|
|
19
|
+
#include <jsoncons_ext/msgpack/msgpack_cursor.hpp>
|
|
20
|
+
#include <jsoncons_ext/msgpack/encode_msgpack.hpp>
|
|
21
|
+
#include <jsoncons_ext/msgpack/decode_msgpack.hpp>
|
|
22
|
+
|
|
23
|
+
#endif
|
|
24
|
+
|