jsoncons 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 10b43faedc8965c2cd6e67f32d231fdb9c948eac6b8dcf0b947234a4000f35bb
|
4
|
+
data.tar.gz: 754df3b74e8c2c122067e200d5511b448cd995efceee344526e9b66cc133b67b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ad1d02c59ec7fd103c2fd708ef42e768a5647a8f111b807546c0ccf95ba4c44aa87daeb56d88e4bfbeb6dc271c20b94779d50e568d1773a9efb7bcbe05502543
|
7
|
+
data.tar.gz: 2cde180c82a272da1d585acdf922b255a9d2872983824eb07668a2de448b6858d7436ab4d11af6dbb13469f4c73ac323df42e24880abf227eaf9646786f8a216
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "mkmf-rice"
|
4
|
+
|
5
|
+
# git submodule add git@github.com:danielaparker/jsoncons.git lib/jsoncons/jsoncons
|
6
|
+
|
7
|
+
# # # git clone --sparse --no-checkout --depth 1 --filter=tree:0 \
|
8
|
+
# # # git@github.com:danielaparker/jsoncons.git lib/jsoncons/jsoncons
|
9
|
+
# cd lib/jsoncons/jsoncons
|
10
|
+
# git sparse-checkout set /include /examples/input
|
11
|
+
# git checkout master # v0.169.0
|
12
|
+
|
13
|
+
gem_root = File.expand_path("../..", __dir__)
|
14
|
+
default_include_dir = File.join(gem_root, "lib", "jsoncons", "jsoncons", "include")
|
15
|
+
|
16
|
+
puts "Default include dir: #{default_include_dir}"
|
17
|
+
|
18
|
+
# Override with
|
19
|
+
# gem install jsoncons -- --with-jsoncons-dir=/path/to/jsoncons
|
20
|
+
# or
|
21
|
+
# gem install jsoncons -- --with-jsoncons-include=/path/to/jsoncons/include
|
22
|
+
# or with rake
|
23
|
+
# CONFIGURE_ARGS='--with-jsoncons-dir=/path/to/jsoncons' rake compile && rake install
|
24
|
+
# or install
|
25
|
+
# gem install pkg/jsoncons-0.1.0.gem -- --with-jsoncons-dir=/path/to/jsoncons
|
26
|
+
include_dir, _lib_dir = dir_config("jsoncons", default_include_dir, "")
|
27
|
+
|
28
|
+
puts "Include dir: #{include_dir}"
|
29
|
+
|
30
|
+
unless have_header("jsoncons/json.hpp") && have_header("jsoncons_ext/jsonpath/jsonpath.hpp")
|
31
|
+
raise <<-MESSAGE
|
32
|
+
Can't find "jsoncons/json.hpp" or "jsoncons_ext/jsonpath/jsonpath.hpp"
|
33
|
+
|
34
|
+
Make sure https://github.com/danielaparker/jsoncons
|
35
|
+
is installed on the system.
|
36
|
+
|
37
|
+
Try passing --with-jsoncons-dir or --with-jsoncons-include
|
38
|
+
options to extconf.
|
39
|
+
MESSAGE
|
40
|
+
end
|
41
|
+
|
42
|
+
# $CPPFLAGS << " -I./lib/jsoncons/jsoncons/include "
|
43
|
+
create_makefile("jsoncons/jsoncons")
|
@@ -0,0 +1,161 @@
|
|
1
|
+
#include "jsoncons.h"
|
2
|
+
|
3
|
+
using namespace Rice;
|
4
|
+
|
5
|
+
typedef /* jsoncons::wojson */ jsoncons::ojson json_class_type;
|
6
|
+
// wchar_t is not defined with Rice
|
7
|
+
typedef /* std::wstring */ std::string json_string_type;
|
8
|
+
|
9
|
+
Module rb_mJsoncons;
|
10
|
+
Data_Type<json_class_type> rb_cJsoncons_Json;
|
11
|
+
Module rb_mJsoncons_JsonPath;
|
12
|
+
Data_Type<jsoncons::jsonpath::jsonpath_expression<json_class_type>> rb_cJsoncons_JsonPath_Expression;
|
13
|
+
Data_Type<jsoncons::jsonpath::result_options> rb_cJsoncons_JsonPath_ResultOptions;
|
14
|
+
Data_Type<jsoncons::json_storage_kind> rb_cJsoncons_StorageKind;
|
15
|
+
Data_Type<jsoncons::json_type> rb_cJsoncons_Type;
|
16
|
+
|
17
|
+
static auto evaluate(const jsoncons::jsonpath::jsonpath_expression<json_class_type> &self,
|
18
|
+
const json_class_type &data,
|
19
|
+
const std::optional<int> &options = std::nullopt) {
|
20
|
+
if (options)
|
21
|
+
return self.evaluate(data, static_cast<jsoncons::jsonpath::result_options>(*options));
|
22
|
+
else return self.evaluate(data);
|
23
|
+
}
|
24
|
+
|
25
|
+
static auto json_query(const json_class_type &self, const json_string_type &path,
|
26
|
+
const std::optional<int> &options = std::nullopt) {
|
27
|
+
// throw Rice::create_type_exception<jsoncons::jsonpath::jsonpath_expression<json_class_type>>(SOME_VALUE);
|
28
|
+
if (options) // Custom functions and callbacks aren't implemented yet
|
29
|
+
return jsoncons::jsonpath::json_query(self, path,
|
30
|
+
static_cast<jsoncons::jsonpath::result_options>(*options));
|
31
|
+
else return jsoncons::jsonpath::json_query(self, path);
|
32
|
+
}
|
33
|
+
|
34
|
+
extern "C"
|
35
|
+
void Init_jsoncons() {
|
36
|
+
rb_mJsoncons = define_module("Jsoncons");
|
37
|
+
rb_cJsoncons_Json =
|
38
|
+
define_class_under<json_class_type>(rb_mJsoncons, "Json")
|
39
|
+
.define_constructor(Constructor<json_class_type>());
|
40
|
+
rb_mJsoncons_JsonPath = define_module_under(rb_mJsoncons, "JsonPath");
|
41
|
+
rb_cJsoncons_JsonPath_Expression =
|
42
|
+
define_class_under<jsoncons::jsonpath::jsonpath_expression<json_class_type>>(
|
43
|
+
rb_mJsoncons_JsonPath,
|
44
|
+
"Expression")
|
45
|
+
.define_singleton_function("make", [](const json_string_type &json_query) {
|
46
|
+
return jsoncons::jsonpath::make_expression<json_class_type>(json_query);
|
47
|
+
})
|
48
|
+
.define_method("evaluate", &evaluate,
|
49
|
+
Arg("options") = (std::optional<int>) std::nullopt);
|
50
|
+
|
51
|
+
rb_cJsoncons_JsonPath_ResultOptions =
|
52
|
+
define_enum<jsoncons::jsonpath::result_options>("ResultOptions", rb_mJsoncons_JsonPath)
|
53
|
+
// Names must be valid for rb_const_set
|
54
|
+
.define_value("Value", jsoncons::jsonpath::result_options::value)
|
55
|
+
.define_value("NoDups", jsoncons::jsonpath::result_options::nodups)
|
56
|
+
.define_value("Sort", jsoncons::jsonpath::result_options::sort)
|
57
|
+
.define_value("Path", jsoncons::jsonpath::result_options::path);
|
58
|
+
rb_cJsoncons_Type =
|
59
|
+
define_enum<jsoncons::json_type>("Type", rb_mJsoncons)
|
60
|
+
.define_value("Null", jsoncons::json_type::null_value)
|
61
|
+
.define_value("Bool", jsoncons::json_type::bool_value)
|
62
|
+
.define_value("Int64", jsoncons::json_type::int64_value)
|
63
|
+
.define_value("Uint64", jsoncons::json_type::uint64_value)
|
64
|
+
.define_value("Half", jsoncons::json_type::half_value)
|
65
|
+
.define_value("Double", jsoncons::json_type::double_value)
|
66
|
+
.define_value("String", jsoncons::json_type::string_value)
|
67
|
+
.define_value("ByteString", jsoncons::json_type::byte_string_value)
|
68
|
+
.define_value("Array", jsoncons::json_type::array_value)
|
69
|
+
.define_value("Object", jsoncons::json_type::object_value);
|
70
|
+
|
71
|
+
rb_cJsoncons_Json.define_singleton_function("parse", [](const json_string_type &source) {
|
72
|
+
return json_class_type::parse(source);
|
73
|
+
});
|
74
|
+
rb_cJsoncons_Json.define_method("to_string", &json_class_type::to_string);
|
75
|
+
rb_define_alias(rb_cJsoncons_Json, "to_s", "to_string");
|
76
|
+
rb_define_alias(rb_cJsoncons_Json, "inspect", "to_string");
|
77
|
+
|
78
|
+
// also has_member
|
79
|
+
rb_cJsoncons_Json.define_method("contains",
|
80
|
+
[](const json_class_type &self, const json_string_type &key) {
|
81
|
+
return self.contains(key);
|
82
|
+
});
|
83
|
+
// rb_cJsoncons_Json.define_method("[]", &key_or_index, Arg("arg").isValue());
|
84
|
+
|
85
|
+
rb_cJsoncons_Json.define_method("at_key", [](const json_class_type &self,
|
86
|
+
const json_string_type &key) {
|
87
|
+
return self.at(key);
|
88
|
+
});
|
89
|
+
rb_cJsoncons_Json.define_method("at_index", [](const json_class_type &self,
|
90
|
+
const std::size_t &i) {
|
91
|
+
return self.at(i);
|
92
|
+
});
|
93
|
+
rb_cJsoncons_Json.define_method("query", &json_query,
|
94
|
+
Arg("options") = (std::optional<int>) std::nullopt);
|
95
|
+
|
96
|
+
rb_cJsoncons_Json
|
97
|
+
.define_method("size", &json_class_type::size)
|
98
|
+
.define_method("empty", &json_class_type::empty)
|
99
|
+
.define_method("clear", &json_class_type::clear) // Doesn't work like that # data["arr"].clear
|
100
|
+
.define_method("swap", &json_class_type::swap) // Doesn't work like that # data["arr"].swap(other_arr)
|
101
|
+
// .define_method("remove", &json_class_type::remove) // erase
|
102
|
+
// .define_method("insert", &json_class_type::insert) // add
|
103
|
+
// .define_method("insert_or_assign", &json_class_type::insert_or_assign) // set
|
104
|
+
// .define_method("push_back", &json_class_type::push_back)
|
105
|
+
// .define_method("merge", &json_class_type::merge)
|
106
|
+
// .define_method("merge_or_update", &json_class_type::merge_or_update)
|
107
|
+
// .define_method("array_value", &json_class_type::array_value)
|
108
|
+
// .define_method("object_value", &json_class_type::object_value)
|
109
|
+
.define_method("type", &json_class_type::type)
|
110
|
+
.define_method("is_null", &json_class_type::is_null)
|
111
|
+
// .define_method("count", &json_class_type::count) // Type is not defined with Rice
|
112
|
+
.define_method("is_string", &json_class_type::is_string)
|
113
|
+
// .define_method("is_string_view", &json_class_type::is_string_view)
|
114
|
+
.define_method("is_byte_string", &json_class_type::is_byte_string)
|
115
|
+
// .define_method("is_byte_string_view", &json_class_type::is_byte_string_view)
|
116
|
+
.define_method("is_bignum", &json_class_type::is_bignum)
|
117
|
+
.define_method("is_bool", &json_class_type::is_bool)
|
118
|
+
.define_method("is_object", &json_class_type::is_object)
|
119
|
+
.define_method("is_array", &json_class_type::is_array)
|
120
|
+
.define_method("is_int64", &json_class_type::is_int64)
|
121
|
+
.define_method("is_uint64", &json_class_type::is_uint64)
|
122
|
+
.define_method("is_half", &json_class_type::is_half)
|
123
|
+
.define_method("is_double", &json_class_type::is_double)
|
124
|
+
.define_method("is_number", &json_class_type::is_number)
|
125
|
+
// .define_method("capacity", &json_class_type::capacity)
|
126
|
+
// .define_method("reserve", &json_class_type::reserve)
|
127
|
+
// .define_method("resize", &json_class_type::resize) // resize_array
|
128
|
+
// .define_method("shrink_to_fit", &json_class_type::shrink_to_fit)
|
129
|
+
.define_method("as_bool", &json_class_type::as_bool)
|
130
|
+
.define_method("as_double", &json_class_type::as_double);
|
131
|
+
// .define_method("as_string", &json_class_type::as_string)
|
132
|
+
// .define_method("as_cstring", &json_class_type::as_cstring)
|
133
|
+
// .define_method("is_integer", &json_class_type::is_integer)
|
134
|
+
// .define_method("is_longlong", &json_class_type::is_longlong) // Deprecated
|
135
|
+
// .define_method("is_ulonglong", &json_class_type::is_ulonglong) // Deprecated
|
136
|
+
// .define_method("as_longlong", &json_class_type::as_longlong) // Deprecated
|
137
|
+
// .define_method("as_ulonglong", &json_class_type::as_ulonglong) // Deprecated
|
138
|
+
// .define_method("as_int", &json_class_type::as_int) // Deprecated
|
139
|
+
// .define_method("as_uint", &json_class_type::as_uint) // Deprecated
|
140
|
+
// .define_method("as_long", &json_class_type::as_long) // Deprecated
|
141
|
+
// .define_method("as_ulong", &json_class_type::as_ulong) // Deprecated
|
142
|
+
// .define_method("as_integer", &json_class_type::as_integer)
|
143
|
+
// .define_method("find", &json_class_type::find)
|
144
|
+
// .define_method("at_or_null", &json_class_type::at_or_null) // Type is not defined with Rice
|
145
|
+
// .define_method("get_value_or", &json_class_type::get_value_or)
|
146
|
+
// .define_method("get_with_default", &json_class_type::get_with_default) // get
|
147
|
+
// .define_method("is_datetime", &json_class_type::is_datetime) // Tags
|
148
|
+
// .define_method("is_epoch_time", &json_class_type::is_epoch_time) // Tags
|
149
|
+
// .define_method("compare", &json_class_type::compare) // "to_json not implemented"
|
150
|
+
// rb_define_alias(rb_cJsoncons_Json, "<=>", "compare");
|
151
|
+
|
152
|
+
|
153
|
+
// rb_cJsoncons_Json.define_method("to_a", [](const json_class_type &self) {
|
154
|
+
// std::vector<json_class_type> res(self.size());
|
155
|
+
// for (int i = 0; i < self.size(); ++i) {
|
156
|
+
// res[i] = self[i];
|
157
|
+
// }
|
158
|
+
// return res;
|
159
|
+
// });
|
160
|
+
}
|
161
|
+
|
data/jsoncons.gemspec
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/jsoncons/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "jsoncons"
|
7
|
+
spec.version = Jsoncons::VERSION
|
8
|
+
spec.authors = ["uvlad7"]
|
9
|
+
spec.email = ["uvlad7@gmail.com"]
|
10
|
+
|
11
|
+
spec.summary = "Ruby wrapper for https://github.com/danielaparker/jsoncons"
|
12
|
+
spec.homepage = "https://github.com/uvlad7/ruby-jsoncons"
|
13
|
+
spec.license = "MIT"
|
14
|
+
spec.required_ruby_version = ">= 2.6.0"
|
15
|
+
|
16
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
17
|
+
|
18
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
19
|
+
spec.metadata["source_code_uri"] = "https://github.com/uvlad7/ruby-jsoncons"
|
20
|
+
spec.metadata["changelog_uri"] = "https://github.com/uvlad7/ruby-jsoncons"
|
21
|
+
|
22
|
+
# Specify which files should be added to the gem when it is released.
|
23
|
+
spec.files = [
|
24
|
+
*Dir["lib/jsoncons/jsoncons/include/**/*"].reject { |f| File.directory?(f) },
|
25
|
+
"ext/jsoncons/jsoncons.cpp", "ext/jsoncons/jsoncons.h", "jsoncons.gemspec", "lib/jsoncons.rb",
|
26
|
+
"lib/jsoncons/version.rb"
|
27
|
+
]
|
28
|
+
spec.test_files = [
|
29
|
+
*Dir["lib/jsoncons/jsoncons/examples/input/**/*"].reject { |f| File.directory?(f) },
|
30
|
+
"test/jsoncons_test.rb", "test/test_helper.rb"
|
31
|
+
]
|
32
|
+
spec.bindir = "exe"
|
33
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
34
|
+
spec.require_paths = ["lib"]
|
35
|
+
spec.extensions = ["ext/jsoncons/extconf.rb"]
|
36
|
+
|
37
|
+
spec.add_dependency "rice", "~> 4.0"
|
38
|
+
spec.add_development_dependency "get_process_mem"
|
39
|
+
spec.add_development_dependency "pry"
|
40
|
+
spec.add_development_dependency "pry-byebug"
|
41
|
+
|
42
|
+
# For more information and examples about making a new gem, checkout our
|
43
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
44
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
{
|
2
|
+
"books":
|
3
|
+
[
|
4
|
+
{
|
5
|
+
"category": "fiction",
|
6
|
+
"title" : "A Wild Sheep Chase",
|
7
|
+
"author" : "Haruki Murakami",
|
8
|
+
"price" : 22.72
|
9
|
+
},
|
10
|
+
{
|
11
|
+
"category": "fiction",
|
12
|
+
"title" : "The Night Watch",
|
13
|
+
"author" : "Sergei Lukyanenko",
|
14
|
+
"price" : 23.58
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"category": "fiction",
|
18
|
+
"title" : "The Comedians",
|
19
|
+
"author" : "Graham Greene",
|
20
|
+
"price" : 21.99
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"category": "memoir",
|
24
|
+
"title" : "The Night Watch",
|
25
|
+
"author" : "Phillips, David Atlee"
|
26
|
+
}
|
27
|
+
]
|
28
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"dept":"sales",
|
4
|
+
"employee-name":"Smith, Matthew",
|
5
|
+
"employee-no":"00000001",
|
6
|
+
"note":"",
|
7
|
+
"salary":"150,000.00"
|
8
|
+
},
|
9
|
+
{
|
10
|
+
"dept":"sales",
|
11
|
+
"employee-name":"Brown, Sarah",
|
12
|
+
"employee-no":"00000002",
|
13
|
+
"note":"",
|
14
|
+
"salary":"89,000.00"
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"dept":"finance",
|
18
|
+
"employee-name":"Oberc, Scott",
|
19
|
+
"employee-no":"00000003",
|
20
|
+
"salary":"110,000.00"
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"dept":"sales",
|
24
|
+
"employee-name":"Scott, Colette",
|
25
|
+
"employee-no":"00000004",
|
26
|
+
"note":"\"Exemplary\" employee\nDependable, trustworthy",
|
27
|
+
"comment":"Team player",
|
28
|
+
"salary":"75,000.00"
|
29
|
+
}
|
30
|
+
]
|
@@ -0,0 +1,6 @@
|
|
1
|
+
customer_name,has_coupon,phone_number,zip_code,sales_tax_rate,total_amount
|
2
|
+
"John Roe",true,0272561313,01001,0.05,431.65
|
3
|
+
"Jane Doe",false,416-272-2561,55416,0.15,480.70
|
4
|
+
"Joe Bloggs",false,"4162722561","55416",0.15,300.70
|
5
|
+
"John Smith",FALSE,NULL,22313-1450,0.15,300.70
|
6
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
{ "store": {
|
2
|
+
"book": [
|
3
|
+
{ "category": "reference",
|
4
|
+
"author": "Nigel Rees",
|
5
|
+
"title": "Sayings of the Century",
|
6
|
+
"price": 8.95
|
7
|
+
},
|
8
|
+
{ "category": "fiction",
|
9
|
+
"author": "Evelyn Waugh",
|
10
|
+
"title": "Sword of Honour",
|
11
|
+
"price": 12.99
|
12
|
+
},
|
13
|
+
{ "category": "fiction",
|
14
|
+
"author": "Herman Melville",
|
15
|
+
"title": "Moby Dick",
|
16
|
+
"isbn": "0-553-21311-3",
|
17
|
+
"price": 8.99
|
18
|
+
},
|
19
|
+
{ "category": "fiction",
|
20
|
+
"author": "J. R. R. Tolkien",
|
21
|
+
"title": "The Lord of the Rings",
|
22
|
+
"isbn": "0-395-19395-8",
|
23
|
+
"price": 22.99
|
24
|
+
}
|
25
|
+
]
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
@@ -0,0 +1,38 @@
|
|
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_ALLOCATOR_HOLDER_HPP
|
8
|
+
#define JSONCONS_ALLOCATOR_HOLDER_HPP
|
9
|
+
|
10
|
+
namespace jsoncons {
|
11
|
+
|
12
|
+
template <class Allocator>
|
13
|
+
class allocator_holder
|
14
|
+
{
|
15
|
+
public:
|
16
|
+
using allocator_type = Allocator;
|
17
|
+
private:
|
18
|
+
allocator_type alloc_;
|
19
|
+
public:
|
20
|
+
allocator_holder() = default;
|
21
|
+
allocator_holder(const allocator_holder&) = default;
|
22
|
+
allocator_holder(allocator_holder&&) = default;
|
23
|
+
allocator_holder& operator=(const allocator_holder&) = default;
|
24
|
+
allocator_holder& operator=(allocator_holder&&) = default;
|
25
|
+
allocator_holder(const allocator_type& alloc)
|
26
|
+
: alloc_(alloc)
|
27
|
+
{}
|
28
|
+
~allocator_holder() = default;
|
29
|
+
|
30
|
+
allocator_type get_allocator() const
|
31
|
+
{
|
32
|
+
return alloc_;
|
33
|
+
}
|
34
|
+
};
|
35
|
+
|
36
|
+
}
|
37
|
+
|
38
|
+
#endif
|