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,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
|