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,92 @@
|
|
|
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_BSON_BSON_READER_HPP
|
|
8
|
+
#define JSONCONS_BSON_BSON_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/json_visitor.hpp>
|
|
17
|
+
#include <jsoncons/config/jsoncons_config.hpp>
|
|
18
|
+
#include <jsoncons_ext/bson/bson_type.hpp>
|
|
19
|
+
#include <jsoncons_ext/bson/bson_error.hpp>
|
|
20
|
+
#include <jsoncons_ext/bson/bson_parser.hpp>
|
|
21
|
+
|
|
22
|
+
namespace jsoncons { namespace bson {
|
|
23
|
+
|
|
24
|
+
template <class Source,class Allocator=std::allocator<char>>
|
|
25
|
+
class basic_bson_reader
|
|
26
|
+
{
|
|
27
|
+
basic_bson_parser<Source,Allocator> parser_;
|
|
28
|
+
json_visitor& visitor_;
|
|
29
|
+
public:
|
|
30
|
+
template <class Sourceable>
|
|
31
|
+
basic_bson_reader(Sourceable&& source,
|
|
32
|
+
json_visitor& visitor,
|
|
33
|
+
const Allocator alloc)
|
|
34
|
+
: basic_bson_reader(std::forward<Sourceable>(source),
|
|
35
|
+
visitor,
|
|
36
|
+
bson_decode_options(),
|
|
37
|
+
alloc)
|
|
38
|
+
{
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
template <class Sourceable>
|
|
42
|
+
basic_bson_reader(Sourceable&& source,
|
|
43
|
+
json_visitor& visitor,
|
|
44
|
+
const bson_decode_options& options = bson_decode_options(),
|
|
45
|
+
const Allocator alloc=Allocator())
|
|
46
|
+
: parser_(std::forward<Sourceable>(source), options, alloc),
|
|
47
|
+
visitor_(visitor)
|
|
48
|
+
{
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
void read()
|
|
52
|
+
{
|
|
53
|
+
std::error_code ec;
|
|
54
|
+
read(ec);
|
|
55
|
+
if (ec)
|
|
56
|
+
{
|
|
57
|
+
JSONCONS_THROW(ser_error(ec,line(),column()));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void read(std::error_code& ec)
|
|
62
|
+
{
|
|
63
|
+
parser_.reset();
|
|
64
|
+
parser_.parse(visitor_, ec);
|
|
65
|
+
if (ec)
|
|
66
|
+
{
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
std::size_t line() const
|
|
72
|
+
{
|
|
73
|
+
return parser_.line();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
std::size_t column() const
|
|
77
|
+
{
|
|
78
|
+
return parser_.column();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
using bson_stream_reader = basic_bson_reader<jsoncons::binary_stream_source>;
|
|
83
|
+
using bson_bytes_reader = basic_bson_reader<jsoncons::bytes_source>;
|
|
84
|
+
|
|
85
|
+
#if !defined(JSONCONS_NO_DEPRECATED)
|
|
86
|
+
JSONCONS_DEPRECATED_MSG("Instead, use bson_stream_reader") typedef bson_stream_reader bson_reader;
|
|
87
|
+
JSONCONS_DEPRECATED_MSG("Instead, use bson_bytes_reader") typedef bson_bytes_reader bson_buffer_reader;
|
|
88
|
+
#endif
|
|
89
|
+
|
|
90
|
+
}}
|
|
91
|
+
|
|
92
|
+
#endif
|
|
@@ -0,0 +1,44 @@
|
|
|
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_BSON_BSON_TYPE_HPP
|
|
8
|
+
#define JSONCONS_BSON_BSON_TYPE_HPP
|
|
9
|
+
|
|
10
|
+
#include <string>
|
|
11
|
+
#include <memory>
|
|
12
|
+
#include <jsoncons/config/jsoncons_config.hpp>
|
|
13
|
+
|
|
14
|
+
namespace jsoncons { namespace bson {
|
|
15
|
+
|
|
16
|
+
namespace bson_type
|
|
17
|
+
{
|
|
18
|
+
const uint8_t double_type = 0x01;
|
|
19
|
+
const uint8_t string_type = 0x02; // UTF-8 string
|
|
20
|
+
const uint8_t document_type = 0x03;
|
|
21
|
+
const uint8_t array_type = 0x04;
|
|
22
|
+
const uint8_t binary_type = 0x05;
|
|
23
|
+
const uint8_t undefined_type = 0x06; // map to null
|
|
24
|
+
const uint8_t object_id_type = 0x07;
|
|
25
|
+
const uint8_t bool_type = 0x08;
|
|
26
|
+
const uint8_t datetime_type = 0x09;
|
|
27
|
+
const uint8_t null_type = 0x0a;
|
|
28
|
+
const uint8_t regex_type = 0x0b;
|
|
29
|
+
const uint8_t javascript_type = 0x0d;
|
|
30
|
+
const uint8_t symbol_type = 0x0e; // deprecated, mapped to string
|
|
31
|
+
const uint8_t javascript_with_scope_type = 0x0f; // unsupported
|
|
32
|
+
const uint8_t int32_type = 0x10;
|
|
33
|
+
const uint8_t timestamp_type = 0x11; // MongoDB internal Timestamp, uint64
|
|
34
|
+
const uint8_t int64_type = 0x12;
|
|
35
|
+
const uint8_t decimal128_type = 0x13;
|
|
36
|
+
const uint8_t min_key_type = 0xff;
|
|
37
|
+
const uint8_t max_key_type = 0x7f;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
enum class bson_container_type {document, array};
|
|
41
|
+
|
|
42
|
+
}}
|
|
43
|
+
|
|
44
|
+
#endif
|
|
@@ -0,0 +1,201 @@
|
|
|
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_BSON_DECODE_BSON_HPP
|
|
8
|
+
#define JSONCONS_BSON_DECODE_BSON_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/bson/bson_reader.hpp>
|
|
18
|
+
#include <jsoncons_ext/bson/bson_cursor.hpp>
|
|
19
|
+
|
|
20
|
+
namespace jsoncons {
|
|
21
|
+
namespace bson {
|
|
22
|
+
|
|
23
|
+
template<class T, class Source>
|
|
24
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value &&
|
|
25
|
+
traits_extension::is_byte_sequence<Source>::value,T>::type
|
|
26
|
+
decode_bson(const Source& v,
|
|
27
|
+
const bson_decode_options& options = bson_decode_options())
|
|
28
|
+
{
|
|
29
|
+
jsoncons::json_decoder<T> decoder;
|
|
30
|
+
auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
|
|
31
|
+
basic_bson_reader<jsoncons::bytes_source> reader(v, adaptor, options);
|
|
32
|
+
reader.read();
|
|
33
|
+
if (!decoder.is_valid())
|
|
34
|
+
{
|
|
35
|
+
JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
|
|
36
|
+
}
|
|
37
|
+
return decoder.get_result();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
template<class T, class Source>
|
|
41
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value &&
|
|
42
|
+
traits_extension::is_byte_sequence<Source>::value,T>::type
|
|
43
|
+
decode_bson(const Source& v,
|
|
44
|
+
const bson_decode_options& options = bson_decode_options())
|
|
45
|
+
{
|
|
46
|
+
basic_bson_cursor<bytes_source> cursor(v, options);
|
|
47
|
+
json_decoder<basic_json<char,sorted_policy>> decoder{};
|
|
48
|
+
|
|
49
|
+
std::error_code ec;
|
|
50
|
+
T val = decode_traits<T,char>::decode(cursor, decoder, ec);
|
|
51
|
+
if (ec)
|
|
52
|
+
{
|
|
53
|
+
JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
|
|
54
|
+
}
|
|
55
|
+
return val;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
template<class T>
|
|
59
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value,T>::type
|
|
60
|
+
decode_bson(std::istream& is,
|
|
61
|
+
const bson_decode_options& options = bson_decode_options())
|
|
62
|
+
{
|
|
63
|
+
jsoncons::json_decoder<T> decoder;
|
|
64
|
+
auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
|
|
65
|
+
bson_stream_reader reader(is, adaptor, options);
|
|
66
|
+
reader.read();
|
|
67
|
+
if (!decoder.is_valid())
|
|
68
|
+
{
|
|
69
|
+
JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
|
|
70
|
+
}
|
|
71
|
+
return decoder.get_result();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
template<class T>
|
|
75
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value,T>::type
|
|
76
|
+
decode_bson(std::istream& is,
|
|
77
|
+
const bson_decode_options& options = bson_decode_options())
|
|
78
|
+
{
|
|
79
|
+
basic_bson_cursor<binary_stream_source> cursor(is, options);
|
|
80
|
+
json_decoder<basic_json<char,sorted_policy>> decoder{};
|
|
81
|
+
|
|
82
|
+
std::error_code ec;
|
|
83
|
+
T val = decode_traits<T,char>::decode(cursor, decoder, ec);
|
|
84
|
+
if (ec)
|
|
85
|
+
{
|
|
86
|
+
JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
|
|
87
|
+
}
|
|
88
|
+
return val;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
template<class T, class InputIt>
|
|
92
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value,T>::type
|
|
93
|
+
decode_bson(InputIt first, InputIt last,
|
|
94
|
+
const bson_decode_options& options = bson_decode_options())
|
|
95
|
+
{
|
|
96
|
+
jsoncons::json_decoder<T> decoder;
|
|
97
|
+
auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
|
|
98
|
+
basic_bson_reader<binary_iterator_source<InputIt>> reader(binary_iterator_source<InputIt>(first, last), adaptor, options);
|
|
99
|
+
reader.read();
|
|
100
|
+
if (!decoder.is_valid())
|
|
101
|
+
{
|
|
102
|
+
JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
|
|
103
|
+
}
|
|
104
|
+
return decoder.get_result();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
template<class T, class InputIt>
|
|
108
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value,T>::type
|
|
109
|
+
decode_bson(InputIt first, InputIt last,
|
|
110
|
+
const bson_decode_options& options = bson_decode_options())
|
|
111
|
+
{
|
|
112
|
+
basic_bson_cursor<binary_iterator_source<InputIt>> cursor(binary_iterator_source<InputIt>(first, last), options);
|
|
113
|
+
json_decoder<basic_json<char,sorted_policy>> decoder{};
|
|
114
|
+
|
|
115
|
+
std::error_code ec;
|
|
116
|
+
T val = decode_traits<T,char>::decode(cursor, decoder, ec);
|
|
117
|
+
if (ec)
|
|
118
|
+
{
|
|
119
|
+
JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
|
|
120
|
+
}
|
|
121
|
+
return val;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// With leading allocator parameter
|
|
125
|
+
|
|
126
|
+
template<class T, class Source, class TempAllocator>
|
|
127
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value &&
|
|
128
|
+
traits_extension::is_byte_sequence<Source>::value,T>::type
|
|
129
|
+
decode_bson(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
130
|
+
const Source& v,
|
|
131
|
+
const bson_decode_options& options = bson_decode_options())
|
|
132
|
+
{
|
|
133
|
+
json_decoder<T,TempAllocator> decoder(temp_alloc);
|
|
134
|
+
auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
|
|
135
|
+
basic_bson_reader<jsoncons::bytes_source,TempAllocator> reader(v, adaptor, options, temp_alloc);
|
|
136
|
+
reader.read();
|
|
137
|
+
if (!decoder.is_valid())
|
|
138
|
+
{
|
|
139
|
+
JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
|
|
140
|
+
}
|
|
141
|
+
return decoder.get_result();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
template<class T, class Source, class TempAllocator>
|
|
145
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value &&
|
|
146
|
+
traits_extension::is_byte_sequence<Source>::value,T>::type
|
|
147
|
+
decode_bson(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
148
|
+
const Source& v,
|
|
149
|
+
const bson_decode_options& options = bson_decode_options())
|
|
150
|
+
{
|
|
151
|
+
basic_bson_cursor<bytes_source,TempAllocator> cursor(v, options, temp_alloc);
|
|
152
|
+
json_decoder<basic_json<char,sorted_policy,TempAllocator>,TempAllocator> decoder(temp_alloc, temp_alloc);
|
|
153
|
+
|
|
154
|
+
std::error_code ec;
|
|
155
|
+
T val = decode_traits<T,char>::decode(cursor, decoder, ec);
|
|
156
|
+
if (ec)
|
|
157
|
+
{
|
|
158
|
+
JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
|
|
159
|
+
}
|
|
160
|
+
return val;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
template<class T,class TempAllocator>
|
|
164
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value,T>::type
|
|
165
|
+
decode_bson(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
166
|
+
std::istream& is,
|
|
167
|
+
const bson_decode_options& options = bson_decode_options())
|
|
168
|
+
{
|
|
169
|
+
json_decoder<T,TempAllocator> decoder(temp_alloc);
|
|
170
|
+
auto adaptor = make_json_visitor_adaptor<json_visitor>(decoder);
|
|
171
|
+
basic_bson_reader<jsoncons::binary_stream_source,TempAllocator> reader(is, adaptor, options, temp_alloc);
|
|
172
|
+
reader.read();
|
|
173
|
+
if (!decoder.is_valid())
|
|
174
|
+
{
|
|
175
|
+
JSONCONS_THROW(ser_error(conv_errc::conversion_failed, reader.line(), reader.column()));
|
|
176
|
+
}
|
|
177
|
+
return decoder.get_result();
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
template<class T,class TempAllocator>
|
|
181
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value,T>::type
|
|
182
|
+
decode_bson(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
183
|
+
std::istream& is,
|
|
184
|
+
const bson_decode_options& options = bson_decode_options())
|
|
185
|
+
{
|
|
186
|
+
basic_bson_cursor<binary_stream_source,TempAllocator> cursor(is, options, temp_alloc);
|
|
187
|
+
json_decoder<basic_json<char,sorted_policy,TempAllocator>,TempAllocator> decoder(temp_alloc, temp_alloc);
|
|
188
|
+
|
|
189
|
+
std::error_code ec;
|
|
190
|
+
T val = decode_traits<T,char>::decode(cursor, decoder, ec);
|
|
191
|
+
if (ec)
|
|
192
|
+
{
|
|
193
|
+
JSONCONS_THROW(ser_error(ec, cursor.context().line(), cursor.context().column()));
|
|
194
|
+
}
|
|
195
|
+
return val;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
} // bson
|
|
199
|
+
} // jsoncons
|
|
200
|
+
|
|
201
|
+
#endif
|
|
@@ -0,0 +1,144 @@
|
|
|
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_BSON_ENCODE_BSON_HPP
|
|
8
|
+
#define JSONCONS_BSON_ENCODE_BSON_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/bson/bson_encoder.hpp>
|
|
18
|
+
#include <jsoncons_ext/bson/bson_reader.hpp>
|
|
19
|
+
|
|
20
|
+
namespace jsoncons {
|
|
21
|
+
namespace bson {
|
|
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_bson(const T& j,
|
|
27
|
+
Container& v,
|
|
28
|
+
const bson_encode_options& options = bson_encode_options())
|
|
29
|
+
{
|
|
30
|
+
using char_type = typename T::char_type;
|
|
31
|
+
basic_bson_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_bson(const T& val,
|
|
40
|
+
Container& v,
|
|
41
|
+
const bson_encode_options& options = bson_encode_options())
|
|
42
|
+
{
|
|
43
|
+
basic_bson_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_bson(const T& j,
|
|
55
|
+
std::ostream& os,
|
|
56
|
+
const bson_encode_options& options = bson_encode_options())
|
|
57
|
+
{
|
|
58
|
+
using char_type = typename T::char_type;
|
|
59
|
+
bson_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_bson(const T& val,
|
|
67
|
+
std::ostream& os,
|
|
68
|
+
const bson_encode_options& options = bson_encode_options())
|
|
69
|
+
{
|
|
70
|
+
bson_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_rag
|
|
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_bson(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
85
|
+
const T& j,
|
|
86
|
+
Container& v,
|
|
87
|
+
const bson_encode_options& options = bson_encode_options())
|
|
88
|
+
{
|
|
89
|
+
using char_type = typename T::char_type;
|
|
90
|
+
basic_bson_encoder<jsoncons::bytes_sink<Container>,TempAllocator> encoder(v, options, temp_alloc);
|
|
91
|
+
auto adaptor = make_json_visitor_adaptor<basic_json_visitor<char_type>>(encoder);
|
|
92
|
+
j.dump(adaptor);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
template<class T, class Container, class TempAllocator>
|
|
96
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value &&
|
|
97
|
+
traits_extension::is_back_insertable_byte_container<Container>::value,void>::type
|
|
98
|
+
encode_bson(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
99
|
+
const T& val,
|
|
100
|
+
Container& v,
|
|
101
|
+
const bson_encode_options& options = bson_encode_options())
|
|
102
|
+
{
|
|
103
|
+
basic_bson_encoder<jsoncons::bytes_sink<Container>,TempAllocator> encoder(v, options, temp_alloc);
|
|
104
|
+
std::error_code ec;
|
|
105
|
+
encode_traits<T,char>::encode(val, encoder, json(), ec);
|
|
106
|
+
if (ec)
|
|
107
|
+
{
|
|
108
|
+
JSONCONS_THROW(ser_error(ec));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
template<class T,class TempAllocator>
|
|
113
|
+
typename std::enable_if<traits_extension::is_basic_json<T>::value,void>::type
|
|
114
|
+
encode_bson(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
115
|
+
const T& j,
|
|
116
|
+
std::ostream& os,
|
|
117
|
+
const bson_encode_options& options = bson_encode_options())
|
|
118
|
+
{
|
|
119
|
+
using char_type = typename T::char_type;
|
|
120
|
+
basic_bson_encoder<jsoncons::binary_stream_sink,TempAllocator> encoder(os, options, temp_alloc);
|
|
121
|
+
auto adaptor = make_json_visitor_adaptor<basic_json_visitor<char_type>>(encoder);
|
|
122
|
+
j.dump(adaptor);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
template<class T,class TempAllocator>
|
|
126
|
+
typename std::enable_if<!traits_extension::is_basic_json<T>::value,void>::type
|
|
127
|
+
encode_bson(temp_allocator_arg_t, const TempAllocator& temp_alloc,
|
|
128
|
+
const T& val,
|
|
129
|
+
std::ostream& os,
|
|
130
|
+
const bson_encode_options& options = bson_encode_options())
|
|
131
|
+
{
|
|
132
|
+
basic_bson_encoder<jsoncons::binary_stream_sink,TempAllocator> encoder(os, options, temp_alloc);
|
|
133
|
+
std::error_code ec;
|
|
134
|
+
encode_traits<T,char>::encode(val, encoder, json(), ec);
|
|
135
|
+
if (ec)
|
|
136
|
+
{
|
|
137
|
+
JSONCONS_THROW(ser_error(ec));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
} // bson
|
|
142
|
+
} // jsoncons
|
|
143
|
+
|
|
144
|
+
#endif
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
|
|
8
|
+
#ifndef JSONCONS_CBOR_CBOR_HPP
|
|
9
|
+
#define JSONCONS_CBOR_CBOR_HPP
|
|
10
|
+
|
|
11
|
+
#include <string>
|
|
12
|
+
#include <vector>
|
|
13
|
+
#include <memory>
|
|
14
|
+
#include <type_traits> // std::enable_if
|
|
15
|
+
#include <istream> // std::basic_istream
|
|
16
|
+
#include <jsoncons/json.hpp>
|
|
17
|
+
#include <jsoncons/json_filter.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
|
+
#include <jsoncons_ext/cbor/cbor_encoder.hpp>
|
|
22
|
+
#include <jsoncons_ext/cbor/encode_cbor.hpp>
|
|
23
|
+
#include <jsoncons_ext/cbor/decode_cbor.hpp>
|
|
24
|
+
|
|
25
|
+
#endif
|
|
26
|
+
|