@@ -7,66 +7,67 @@ VALUE rb_eFastJsonparserUnknownError, rb_eFastJsonparserParseError;
7
7
using namespace simdjson ;
8
8
9
9
// Convert tape to Ruby's Object
10
- static VALUE make_ruby_object (dom::element element, bool symbolize_names )
10
+ static VALUE make_ruby_object (dom::element element, bool symbolize_keys )
11
11
{
12
12
switch (element.type ())
13
13
{
14
- case dom::element_type::ARRAY:
14
+ case dom::element_type::ARRAY:
15
+ {
16
+ VALUE ary = rb_ary_new ();
17
+ for (dom::element x : element)
15
18
{
16
- VALUE ary = rb_ary_new ();
17
- for (dom::element x : element)
18
- {
19
- VALUE e = make_ruby_object (x, symbolize_names);
20
- rb_ary_push (ary, e);
21
- }
22
- return ary;
19
+ VALUE e = make_ruby_object (x, symbolize_keys);
20
+ rb_ary_push (ary, e);
23
21
}
24
- case dom::element_type::OBJECT:
22
+ return ary;
23
+ }
24
+ case dom::element_type::OBJECT:
25
+ {
26
+ VALUE hash = rb_hash_new ();
27
+ for (dom::key_value_pair field : dom::object (element))
25
28
{
26
- VALUE hash = rb_hash_new ();
27
- for (dom::key_value_pair field : dom::object (element))
29
+ std::string_view view (field.key );
30
+ VALUE k = rb_utf8_str_new (view.data (), view.size ());
31
+ if (symbolize_keys)
28
32
{
29
- std::string_view view (field.key );
30
- VALUE k = rb_utf8_str_new (view.data (), view.size ());
31
- if (symbolize_names) {
32
- k = ID2SYM (rb_intern_str (k));
33
- }
34
- VALUE v = make_ruby_object (field.value , symbolize_names);
35
- rb_hash_aset (hash, k, v);
33
+ k = ID2SYM (rb_intern_str (k));
36
34
}
37
- return hash;
38
- }
39
- case dom::element_type::INT64:
40
- {
41
- return LONG2NUM (element.get <int64_t >());
42
- }
43
- case dom::element_type::UINT64:
44
- {
45
- return ULONG2NUM (element.get <uint64_t >());
46
- }
47
- case dom::element_type::DOUBLE:
48
- {
49
- return DBL2NUM (double (element));
50
- }
51
- case dom::element_type::STRING:
52
- {
53
- std::string_view view (element);
54
- return rb_utf8_str_new (view.data (), view.size ());
55
- }
56
- case dom::element_type::BOOL:
57
- {
58
- return bool (element) ? Qtrue : Qfalse;
59
- }
60
- case dom::element_type::NULL_VALUE:
61
- {
62
- return Qnil;
35
+ VALUE v = make_ruby_object (field.value , symbolize_keys);
36
+ rb_hash_aset (hash, k, v);
63
37
}
38
+ return hash;
39
+ }
40
+ case dom::element_type::INT64:
41
+ {
42
+ return LONG2NUM (element.get <int64_t >());
43
+ }
44
+ case dom::element_type::UINT64:
45
+ {
46
+ return ULONG2NUM (element.get <uint64_t >());
47
+ }
48
+ case dom::element_type::DOUBLE:
49
+ {
50
+ return DBL2NUM (double (element));
51
+ }
52
+ case dom::element_type::STRING:
53
+ {
54
+ std::string_view view (element);
55
+ return rb_utf8_str_new (view.data (), view.size ());
56
+ }
57
+ case dom::element_type::BOOL:
58
+ {
59
+ return bool (element) ? Qtrue : Qfalse;
60
+ }
61
+ case dom::element_type::NULL_VALUE:
62
+ {
63
+ return Qnil;
64
+ }
64
65
}
65
66
// unknown case (bug)
66
67
rb_raise (rb_eException, " [BUG] must not happen" );
67
68
}
68
69
69
- static VALUE rb_fast_jsonparser_parse (VALUE self, VALUE arg, VALUE symbolize_names )
70
+ static VALUE rb_fast_jsonparser_parse (VALUE self, VALUE arg, VALUE symbolize_keys )
70
71
{
71
72
Check_Type (arg, T_STRING);
72
73
@@ -76,10 +77,10 @@ static VALUE rb_fast_jsonparser_parse(VALUE self, VALUE arg, VALUE symbolize_nam
76
77
{
77
78
rb_raise (rb_eFastJsonparserParseError, " %s" , error_message (error));
78
79
}
79
- return make_ruby_object (doc, RTEST (symbolize_names ));
80
+ return make_ruby_object (doc, RTEST (symbolize_keys ));
80
81
}
81
82
82
- static VALUE rb_fast_jsonparser_load (VALUE self, VALUE arg, VALUE symbolize_names )
83
+ static VALUE rb_fast_jsonparser_load (VALUE self, VALUE arg, VALUE symbolize_keys )
83
84
{
84
85
Check_Type (arg, T_STRING);
85
86
@@ -89,15 +90,16 @@ static VALUE rb_fast_jsonparser_load(VALUE self, VALUE arg, VALUE symbolize_name
89
90
{
90
91
rb_raise (rb_eFastJsonparserParseError, " %s" , error_message (error));
91
92
}
92
- return make_ruby_object (doc, RTEST (symbolize_names ));
93
+ return make_ruby_object (doc, RTEST (symbolize_keys ));
93
94
}
94
95
95
- static VALUE rb_fast_jsonparser_load_many (VALUE self, VALUE arg, VALUE symbolize_names , VALUE batch_size)
96
+ static VALUE rb_fast_jsonparser_load_many (VALUE self, VALUE arg, VALUE symbolize_keys , VALUE batch_size)
96
97
{
97
98
Check_Type (arg, T_STRING);
98
99
Check_Type (batch_size, T_FIXNUM);
99
100
100
- try {
101
+ try
102
+ {
101
103
dom::parser parser;
102
104
auto [docs, error] = parser.load_many (RSTRING_PTR (arg), FIX2INT (batch_size));
103
105
if (error != SUCCESS)
@@ -107,11 +109,13 @@ static VALUE rb_fast_jsonparser_load_many(VALUE self, VALUE arg, VALUE symbolize
107
109
108
110
for (dom::element doc : docs)
109
111
{
110
- rb_yield (make_ruby_object (doc, RTEST (symbolize_names )));
112
+ rb_yield (make_ruby_object (doc, RTEST (symbolize_keys )));
111
113
}
112
114
113
115
return Qnil;
114
- } catch (simdjson::simdjson_error error) {
116
+ }
117
+ catch (simdjson::simdjson_error error)
118
+ {
115
119
rb_raise (rb_eFastJsonparserUnknownError, " %s" , error.what ());
116
120
}
117
121
}
0 commit comments