thrift 0.2.0.4 → 0.4.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.
- data/CHANGELOG +1 -13
- data/Manifest +11 -23
- data/Rakefile +8 -6
- data/ext/binary_protocol_accelerated.c +4 -53
- data/ext/compact_protocol.c +3 -53
- data/ext/extconf.rb +4 -18
- data/ext/struct.c +181 -130
- data/ext/struct.h +2 -44
- data/ext/thrift_native.c +3 -3
- data/lib/thrift.rb +6 -1
- data/lib/thrift/protocol/binary_protocol_accelerated.rb +5 -1
- data/lib/thrift/protocol/compact_protocol.rb +1 -0
- data/lib/thrift/server/nonblocking_server.rb +1 -2
- data/lib/thrift/struct.rb +46 -112
- data/lib/thrift/struct_union.rb +159 -0
- data/lib/thrift/transport/http_client_transport.rb +12 -6
- data/lib/thrift/transport/memory_buffer_transport.rb +2 -2
- data/lib/thrift/types.rb +1 -1
- data/lib/thrift/union.rb +179 -0
- data/spec/ThriftSpec.thrift +48 -0
- data/spec/binary_protocol_accelerated_spec.rb +18 -13
- data/spec/binary_protocol_spec_shared.rb +2 -2
- data/spec/compact_protocol_spec.rb +19 -3
- data/spec/http_client_spec.rb +17 -2
- data/spec/struct_spec.rb +34 -0
- data/spec/union_spec.rb +193 -0
- data/thrift.gemspec +11 -13
- metadata +36 -67
- data.tar.gz.sig +0 -2
- data/Makefile.am +0 -47
- data/benchmark/gen-rb/BenchmarkService.rb +0 -81
- data/benchmark/gen-rb/Benchmark_constants.rb +0 -11
- data/benchmark/gen-rb/Benchmark_types.rb +0 -10
- data/lib/thrift/protocol/binaryprotocol.rb +0 -213
- data/lib/thrift/protocol/binaryprotocolaccelerated.rb +0 -19
- data/lib/thrift/protocol/tbinaryprotocol.rb +0 -2
- data/lib/thrift/protocol/tprotocol.rb +0 -2
- data/lib/thrift/server/httpserver.rb +0 -44
- data/lib/thrift/server/nonblockingserver.rb +0 -278
- data/lib/thrift/server/thttpserver.rb +0 -2
- data/lib/thrift/server/tserver.rb +0 -2
- data/spec/gen-rb/NonblockingService.rb +0 -268
- data/spec/gen-rb/ThriftSpec_constants.rb +0 -11
- data/spec/gen-rb/ThriftSpec_types.rb +0 -134
- metadata.gz.sig +0 -0
data/CHANGELOG
CHANGED
@@ -1,13 +1 @@
|
|
1
|
-
v0.
|
2
|
-
|
3
|
-
v0.2.0.3 Support JRuby properly (tritonrc).
|
4
|
-
|
5
|
-
v0.2.0.2 Remove -Werror from compile.
|
6
|
-
|
7
|
-
v0.2.0. Update version to Thrift release 0.2.0. No actual code changes.
|
8
|
-
|
9
|
-
v0.0.820831. Update to Thrift trunk 820831.
|
10
|
-
|
11
|
-
v0.0.810255.1. Fixes for Ruby 1.9.
|
12
|
-
|
13
|
-
v0.0.789419. Initial release
|
1
|
+
v0.0.1. Initial release
|
data/Manifest
CHANGED
@@ -1,14 +1,11 @@
|
|
1
1
|
CHANGELOG
|
2
|
-
Makefile.am
|
3
2
|
Manifest
|
4
|
-
README
|
5
3
|
Rakefile
|
6
|
-
|
4
|
+
README
|
5
|
+
setup.rb
|
7
6
|
benchmark/benchmark.rb
|
7
|
+
benchmark/Benchmark.thrift
|
8
8
|
benchmark/client.rb
|
9
|
-
benchmark/gen-rb/BenchmarkService.rb
|
10
|
-
benchmark/gen-rb/Benchmark_constants.rb
|
11
|
-
benchmark/gen-rb/Benchmark_types.rb
|
12
9
|
benchmark/server.rb
|
13
10
|
benchmark/thin_server.rb
|
14
11
|
ext/binary_protocol_accelerated.c
|
@@ -28,31 +25,26 @@ ext/thrift_native.c
|
|
28
25
|
lib/thrift.rb
|
29
26
|
lib/thrift/client.rb
|
30
27
|
lib/thrift/core_ext.rb
|
31
|
-
lib/thrift/core_ext/fixnum.rb
|
32
28
|
lib/thrift/exceptions.rb
|
33
29
|
lib/thrift/processor.rb
|
30
|
+
lib/thrift/struct.rb
|
31
|
+
lib/thrift/struct_union.rb
|
32
|
+
lib/thrift/union.rb
|
33
|
+
lib/thrift/thrift_native.rb
|
34
|
+
lib/thrift/types.rb
|
35
|
+
lib/thrift/core_ext/fixnum.rb
|
34
36
|
lib/thrift/protocol/base_protocol.rb
|
35
37
|
lib/thrift/protocol/binary_protocol.rb
|
36
38
|
lib/thrift/protocol/binary_protocol_accelerated.rb
|
37
|
-
lib/thrift/protocol/binaryprotocol.rb
|
38
|
-
lib/thrift/protocol/binaryprotocolaccelerated.rb
|
39
39
|
lib/thrift/protocol/compact_protocol.rb
|
40
|
-
lib/thrift/protocol/tbinaryprotocol.rb
|
41
|
-
lib/thrift/protocol/tprotocol.rb
|
42
40
|
lib/thrift/serializer/deserializer.rb
|
43
41
|
lib/thrift/serializer/serializer.rb
|
44
42
|
lib/thrift/server/base_server.rb
|
45
|
-
lib/thrift/server/httpserver.rb
|
46
43
|
lib/thrift/server/mongrel_http_server.rb
|
47
44
|
lib/thrift/server/nonblocking_server.rb
|
48
|
-
lib/thrift/server/nonblockingserver.rb
|
49
45
|
lib/thrift/server/simple_server.rb
|
50
46
|
lib/thrift/server/thread_pool_server.rb
|
51
47
|
lib/thrift/server/threaded_server.rb
|
52
|
-
lib/thrift/server/thttpserver.rb
|
53
|
-
lib/thrift/server/tserver.rb
|
54
|
-
lib/thrift/struct.rb
|
55
|
-
lib/thrift/thrift_native.rb
|
56
48
|
lib/thrift/transport/base_server_transport.rb
|
57
49
|
lib/thrift/transport/base_transport.rb
|
58
50
|
lib/thrift/transport/buffered_transport.rb
|
@@ -64,12 +56,9 @@ lib/thrift/transport/server_socket.rb
|
|
64
56
|
lib/thrift/transport/socket.rb
|
65
57
|
lib/thrift/transport/unix_server_socket.rb
|
66
58
|
lib/thrift/transport/unix_socket.rb
|
67
|
-
lib/thrift/types.rb
|
68
59
|
script/proto_benchmark.rb
|
69
60
|
script/read_struct.rb
|
70
61
|
script/write_struct.rb
|
71
|
-
setup.rb
|
72
|
-
spec/ThriftSpec.thrift
|
73
62
|
spec/base_protocol_spec.rb
|
74
63
|
spec/base_transport_spec.rb
|
75
64
|
spec/binary_protocol_accelerated_spec.rb
|
@@ -78,9 +67,6 @@ spec/binary_protocol_spec_shared.rb
|
|
78
67
|
spec/client_spec.rb
|
79
68
|
spec/compact_protocol_spec.rb
|
80
69
|
spec/exception_spec.rb
|
81
|
-
spec/gen-rb/NonblockingService.rb
|
82
|
-
spec/gen-rb/ThriftSpec_constants.rb
|
83
|
-
spec/gen-rb/ThriftSpec_types.rb
|
84
70
|
spec/http_client_spec.rb
|
85
71
|
spec/mongrel_http_server_spec.rb
|
86
72
|
spec/nonblocking_server_spec.rb
|
@@ -92,5 +78,7 @@ spec/socket_spec.rb
|
|
92
78
|
spec/socket_spec_shared.rb
|
93
79
|
spec/spec_helper.rb
|
94
80
|
spec/struct_spec.rb
|
81
|
+
spec/union_spec.rb
|
82
|
+
spec/ThriftSpec.thrift
|
95
83
|
spec/types_spec.rb
|
96
84
|
spec/unix_socket_spec.rb
|
data/Rakefile
CHANGED
@@ -77,20 +77,22 @@ begin
|
|
77
77
|
require 'echoe'
|
78
78
|
|
79
79
|
Echoe.new('thrift') do |p|
|
80
|
-
p.author = ['Kevin Ballard', 'Kevin Clark', 'Mark Slee'
|
81
|
-
p.
|
80
|
+
p.author = ['Kevin Ballard', 'Kevin Clark', 'Mark Slee']
|
81
|
+
p.email = ['kevin@sb.org', 'kevin.clark@gmail.com', 'mcslee@facebook.com']
|
82
82
|
p.summary = "Ruby libraries for Thrift (a language-agnostic RPC system)"
|
83
|
+
p.url = "http://incubator.apache.org/thrift/"
|
83
84
|
p.include_rakefile = true
|
84
|
-
p.
|
85
|
-
p.
|
85
|
+
p.version = "0.4.0"
|
86
|
+
p.rubygems_version = ">= 1.2.0"
|
86
87
|
end
|
87
88
|
|
88
89
|
task :install => [:check_site_lib]
|
89
90
|
|
90
91
|
require 'rbconfig'
|
91
92
|
task :check_site_lib do
|
92
|
-
|
93
|
-
|
93
|
+
if File.exist?(File.join(Config::CONFIG['sitelibdir'], 'thrift.rb'))
|
94
|
+
fail "thrift is already installed in site_ruby"
|
95
|
+
end
|
94
96
|
end
|
95
97
|
rescue LoadError
|
96
98
|
[:install, :package].each do |t|
|
@@ -374,15 +374,15 @@ VALUE rb_thrift_binary_proto_read_string(VALUE self) {
|
|
374
374
|
|
375
375
|
void Init_binary_protocol_accelerated() {
|
376
376
|
VALUE thrift_binary_protocol_class = rb_const_get(thrift_module, rb_intern("BinaryProtocol"));
|
377
|
-
|
377
|
+
|
378
378
|
VERSION_1 = rb_num2ll(rb_const_get(thrift_binary_protocol_class, rb_intern("VERSION_1")));
|
379
379
|
VERSION_MASK = rb_num2ll(rb_const_get(thrift_binary_protocol_class, rb_intern("VERSION_MASK")));
|
380
380
|
TYPE_MASK = rb_num2ll(rb_const_get(thrift_binary_protocol_class, rb_intern("TYPE_MASK")));
|
381
|
-
|
381
|
+
|
382
382
|
VALUE bpa_class = rb_define_class_under(thrift_module, "BinaryProtocolAccelerated", thrift_binary_protocol_class);
|
383
|
-
|
383
|
+
|
384
384
|
rb_define_method(bpa_class, "native?", rb_thrift_binary_proto_native_qmark, 0);
|
385
|
-
|
385
|
+
|
386
386
|
rb_define_method(bpa_class, "write_message_begin", rb_thrift_binary_proto_write_message_begin, 3);
|
387
387
|
rb_define_method(bpa_class, "write_field_begin", rb_thrift_binary_proto_write_field_begin, 3);
|
388
388
|
rb_define_method(bpa_class, "write_field_stop", rb_thrift_binary_proto_write_field_stop, 0);
|
@@ -404,8 +404,6 @@ void Init_binary_protocol_accelerated() {
|
|
404
404
|
rb_define_method(bpa_class, "write_map_end", rb_thrift_binary_proto_write_map_end, 0);
|
405
405
|
rb_define_method(bpa_class, "write_list_end", rb_thrift_binary_proto_write_list_end, 0);
|
406
406
|
rb_define_method(bpa_class, "write_set_end", rb_thrift_binary_proto_write_set_end, 0);
|
407
|
-
|
408
|
-
|
409
407
|
|
410
408
|
rb_define_method(bpa_class, "read_message_begin", rb_thrift_binary_proto_read_message_begin, 0);
|
411
409
|
rb_define_method(bpa_class, "read_field_begin", rb_thrift_binary_proto_read_field_begin, 0);
|
@@ -427,51 +425,4 @@ void Init_binary_protocol_accelerated() {
|
|
427
425
|
rb_define_method(bpa_class, "read_map_end", rb_thift_binary_proto_read_map_end, 0);
|
428
426
|
rb_define_method(bpa_class, "read_list_end", rb_thift_binary_proto_read_list_end, 0);
|
429
427
|
rb_define_method(bpa_class, "read_set_end", rb_thift_binary_proto_read_set_end, 0);
|
430
|
-
|
431
|
-
// set up native method table
|
432
|
-
native_proto_method_table *npmt;
|
433
|
-
npmt = ALLOC(native_proto_method_table);
|
434
|
-
|
435
|
-
npmt->write_field_begin = rb_thrift_binary_proto_write_field_begin;
|
436
|
-
npmt->write_field_stop = rb_thrift_binary_proto_write_field_stop;
|
437
|
-
npmt->write_map_begin = rb_thrift_binary_proto_write_map_begin;
|
438
|
-
npmt->write_list_begin = rb_thrift_binary_proto_write_list_begin;
|
439
|
-
npmt->write_set_begin = rb_thrift_binary_proto_write_set_begin;
|
440
|
-
npmt->write_byte = rb_thrift_binary_proto_write_byte;
|
441
|
-
npmt->write_bool = rb_thrift_binary_proto_write_bool;
|
442
|
-
npmt->write_i16 = rb_thrift_binary_proto_write_i16;
|
443
|
-
npmt->write_i32 = rb_thrift_binary_proto_write_i32;
|
444
|
-
npmt->write_i64 = rb_thrift_binary_proto_write_i64;
|
445
|
-
npmt->write_double = rb_thrift_binary_proto_write_double;
|
446
|
-
npmt->write_string = rb_thrift_binary_proto_write_string;
|
447
|
-
npmt->write_message_end = rb_thrift_binary_proto_write_message_end;
|
448
|
-
npmt->write_struct_begin = rb_thrift_binary_proto_write_struct_begin;
|
449
|
-
npmt->write_struct_end = rb_thrift_binary_proto_write_struct_end;
|
450
|
-
npmt->write_field_end = rb_thrift_binary_proto_write_field_end;
|
451
|
-
npmt->write_map_end = rb_thrift_binary_proto_write_map_end;
|
452
|
-
npmt->write_list_end = rb_thrift_binary_proto_write_list_end;
|
453
|
-
npmt->write_set_end = rb_thrift_binary_proto_write_set_end;
|
454
|
-
|
455
|
-
npmt->read_message_begin = rb_thrift_binary_proto_read_message_begin;
|
456
|
-
npmt->read_field_begin = rb_thrift_binary_proto_read_field_begin;
|
457
|
-
npmt->read_map_begin = rb_thrift_binary_proto_read_map_begin;
|
458
|
-
npmt->read_list_begin = rb_thrift_binary_proto_read_list_begin;
|
459
|
-
npmt->read_set_begin = rb_thrift_binary_proto_read_set_begin;
|
460
|
-
npmt->read_byte = rb_thrift_binary_proto_read_byte;
|
461
|
-
npmt->read_bool = rb_thrift_binary_proto_read_bool;
|
462
|
-
npmt->read_i16 = rb_thrift_binary_proto_read_i16;
|
463
|
-
npmt->read_i32 = rb_thrift_binary_proto_read_i32;
|
464
|
-
npmt->read_i64 = rb_thrift_binary_proto_read_i64;
|
465
|
-
npmt->read_double = rb_thrift_binary_proto_read_double;
|
466
|
-
npmt->read_string = rb_thrift_binary_proto_read_string;
|
467
|
-
npmt->read_message_end = rb_thrift_binary_proto_read_message_end;
|
468
|
-
npmt->read_struct_begin = rb_thift_binary_proto_read_struct_begin;
|
469
|
-
npmt->read_struct_end = rb_thift_binary_proto_read_struct_end;
|
470
|
-
npmt->read_field_end = rb_thift_binary_proto_read_field_end;
|
471
|
-
npmt->read_map_end = rb_thift_binary_proto_read_map_end;
|
472
|
-
npmt->read_list_end = rb_thift_binary_proto_read_list_end;
|
473
|
-
npmt->read_set_end = rb_thift_binary_proto_read_set_end;
|
474
|
-
|
475
|
-
VALUE method_table_object = Data_Wrap_Struct(rb_cObject, 0, free, npmt);
|
476
|
-
rb_const_set(bpa_class, rb_intern("@native_method_table"), method_table_object);
|
477
428
|
}
|
data/ext/compact_protocol.c
CHANGED
@@ -20,8 +20,8 @@
|
|
20
20
|
#include <ruby.h>
|
21
21
|
#include <stdbool.h>
|
22
22
|
#include <stdint.h>
|
23
|
-
#include
|
24
|
-
#include
|
23
|
+
#include "constants.h"
|
24
|
+
#include "struct.h"
|
25
25
|
#include "macros.h"
|
26
26
|
|
27
27
|
#define LAST_ID(obj) FIX2INT(rb_ary_pop(rb_ivar_get(obj, last_field_id)))
|
@@ -458,6 +458,7 @@ VALUE rb_thrift_compact_proto_read_field_begin(VALUE self) {
|
|
458
458
|
|
459
459
|
if (modifier == 0) {
|
460
460
|
// not a delta. look ahead for the zigzag varint field id.
|
461
|
+
(void) LAST_ID(self);
|
461
462
|
field_id = read_i16(self);
|
462
463
|
} else {
|
463
464
|
// has a delta. add the delta to the last read field id.
|
@@ -608,58 +609,7 @@ static void Init_rb_methods() {
|
|
608
609
|
rb_define_method(thrift_compact_protocol_class, "read_set_end", rb_thrift_compact_proto_read_set_end, 0);
|
609
610
|
}
|
610
611
|
|
611
|
-
static void Init_npmt() {
|
612
|
-
native_proto_method_table *npmt;
|
613
|
-
npmt = ALLOC(native_proto_method_table);
|
614
|
-
|
615
|
-
npmt->write_field_begin = rb_thrift_compact_proto_write_field_begin;
|
616
|
-
npmt->write_field_stop = rb_thrift_compact_proto_write_field_stop;
|
617
|
-
npmt->write_map_begin = rb_thrift_compact_proto_write_map_begin;
|
618
|
-
npmt->write_list_begin = rb_thrift_compact_proto_write_list_begin;
|
619
|
-
npmt->write_set_begin = rb_thrift_compact_proto_write_set_begin;
|
620
|
-
npmt->write_byte = rb_thrift_compact_proto_write_byte;
|
621
|
-
npmt->write_bool = rb_thrift_compact_proto_write_bool;
|
622
|
-
npmt->write_i16 = rb_thrift_compact_proto_write_i16;
|
623
|
-
npmt->write_i32 = rb_thrift_compact_proto_write_i32;
|
624
|
-
npmt->write_i64 = rb_thrift_compact_proto_write_i64;
|
625
|
-
npmt->write_double = rb_thrift_compact_proto_write_double;
|
626
|
-
npmt->write_string = rb_thrift_compact_proto_write_string;
|
627
|
-
npmt->write_message_end = rb_thrift_compact_proto_write_message_end;
|
628
|
-
npmt->write_struct_begin = rb_thrift_compact_proto_write_struct_begin;
|
629
|
-
npmt->write_struct_end = rb_thrift_compact_proto_write_struct_end;
|
630
|
-
npmt->write_field_end = rb_thrift_compact_proto_write_field_end;
|
631
|
-
npmt->write_map_end = rb_thrift_compact_proto_write_map_end;
|
632
|
-
npmt->write_list_end = rb_thrift_compact_proto_write_list_end;
|
633
|
-
npmt->write_set_end = rb_thrift_compact_proto_write_set_end;
|
634
|
-
|
635
|
-
npmt->read_message_begin = rb_thrift_compact_proto_read_message_begin;
|
636
|
-
npmt->read_field_begin = rb_thrift_compact_proto_read_field_begin;
|
637
|
-
npmt->read_map_begin = rb_thrift_compact_proto_read_map_begin;
|
638
|
-
npmt->read_list_begin = rb_thrift_compact_proto_read_list_begin;
|
639
|
-
npmt->read_set_begin = rb_thrift_compact_proto_read_set_begin;
|
640
|
-
npmt->read_byte = rb_thrift_compact_proto_read_byte;
|
641
|
-
npmt->read_bool = rb_thrift_compact_proto_read_bool;
|
642
|
-
npmt->read_i16 = rb_thrift_compact_proto_read_i16;
|
643
|
-
npmt->read_i32 = rb_thrift_compact_proto_read_i32;
|
644
|
-
npmt->read_i64 = rb_thrift_compact_proto_read_i64;
|
645
|
-
npmt->read_double = rb_thrift_compact_proto_read_double;
|
646
|
-
npmt->read_string = rb_thrift_compact_proto_read_string;
|
647
|
-
npmt->read_message_end = rb_thrift_compact_proto_read_message_end;
|
648
|
-
npmt->read_struct_begin = rb_thrift_compact_proto_read_struct_begin;
|
649
|
-
npmt->read_struct_end = rb_thrift_compact_proto_read_struct_end;
|
650
|
-
npmt->read_field_end = rb_thrift_compact_proto_read_field_end;
|
651
|
-
npmt->read_map_end = rb_thrift_compact_proto_read_map_end;
|
652
|
-
npmt->read_list_end = rb_thrift_compact_proto_read_list_end;
|
653
|
-
npmt->read_set_end = rb_thrift_compact_proto_read_set_end;
|
654
|
-
|
655
|
-
VALUE method_table_object = Data_Wrap_Struct(rb_cObject, 0, free, npmt);
|
656
|
-
rb_const_set(thrift_compact_protocol_class, rb_intern("@native_method_table"), method_table_object);
|
657
|
-
}
|
658
|
-
|
659
|
-
|
660
|
-
|
661
612
|
void Init_compact_protocol() {
|
662
613
|
Init_constants();
|
663
614
|
Init_rb_methods();
|
664
|
-
Init_npmt();
|
665
615
|
}
|
data/ext/extconf.rb
CHANGED
@@ -17,24 +17,10 @@
|
|
17
17
|
# under the License.
|
18
18
|
#
|
19
19
|
|
20
|
-
|
21
|
-
require 'mkmf'
|
20
|
+
require 'mkmf'
|
22
21
|
|
23
|
-
|
22
|
+
$CFLAGS = "-g -O2 -Wall -Werror"
|
24
23
|
|
25
|
-
|
24
|
+
have_func("strlcpy", "string.h")
|
26
25
|
|
27
|
-
|
28
|
-
else
|
29
|
-
# RubyGems Gem::Ext::ExtConfBuilder is looking for a Makefile
|
30
|
-
# so make a dummy Makefile to appease it
|
31
|
-
File.open(File.expand_path('../Makefile', __FILE__), 'w') do |f|
|
32
|
-
f.write <<-EOS
|
33
|
-
all:
|
34
|
-
static:
|
35
|
-
clean:
|
36
|
-
distclean:
|
37
|
-
install:
|
38
|
-
EOS
|
39
|
-
end
|
40
|
-
end
|
26
|
+
create_makefile 'thrift_native'
|
data/ext/struct.c
CHANGED
@@ -17,8 +17,8 @@
|
|
17
17
|
* under the License.
|
18
18
|
*/
|
19
19
|
|
20
|
-
#include
|
21
|
-
#include
|
20
|
+
#include "struct.h"
|
21
|
+
#include "constants.h"
|
22
22
|
#include "macros.h"
|
23
23
|
|
24
24
|
#ifndef HAVE_STRLCPY
|
@@ -40,34 +40,25 @@ strlcpy (char *dst, const char *src, size_t dst_sz)
|
|
40
40
|
*(dst - 1) = '\0';
|
41
41
|
return n + strlen (src);
|
42
42
|
}
|
43
|
-
|
43
|
+
#else
|
44
|
+
/*
|
45
|
+
Ruby 1.9.x includes the OpenBSD implementation of strlcpy.
|
46
|
+
See missing/strlcpy.c in Ruby 1.9 source
|
47
|
+
*/
|
48
|
+
extern size_t strlcpy(char *, const char *, size_t);
|
44
49
|
#endif
|
45
50
|
|
46
|
-
|
47
|
-
|
48
|
-
|
51
|
+
VALUE thrift_union_class;
|
52
|
+
|
53
|
+
ID setfield_id;
|
54
|
+
ID setvalue_id;
|
55
|
+
|
56
|
+
ID to_s_method_id;
|
57
|
+
ID name_to_id_method_id;
|
49
58
|
|
50
59
|
#define IS_CONTAINER(ttype) ((ttype) == TTYPE_MAP || (ttype) == TTYPE_LIST || (ttype) == TTYPE_SET)
|
51
60
|
#define STRUCT_FIELDS(obj) rb_const_get(CLASS_OF(obj), fields_const_id)
|
52
61
|
|
53
|
-
// static void set_native_proto_function_pointers(VALUE protocol) {
|
54
|
-
// VALUE method_table_object = rb_const_get(CLASS_OF(protocol), rb_intern("@native_method_table"));
|
55
|
-
// // TODO: check nil?
|
56
|
-
// Data_Get_Struct(method_table_object, native_proto_method_table, mt);
|
57
|
-
// }
|
58
|
-
|
59
|
-
// static void check_native_proto_method_table(VALUE protocol) {
|
60
|
-
// VALUE protoclass = CLASS_OF(protocol);
|
61
|
-
// if (protoclass != last_proto_class) {
|
62
|
-
// last_proto_class = protoclass;
|
63
|
-
// if (rb_funcall(protocol, native_qmark_method_id, 0) == Qtrue) {
|
64
|
-
// set_native_proto_function_pointers(protocol);
|
65
|
-
// } else {
|
66
|
-
// mt = default_mt;
|
67
|
-
// }
|
68
|
-
// }
|
69
|
-
// }
|
70
|
-
|
71
62
|
//-------------------------------------------
|
72
63
|
// Writing section
|
73
64
|
//-------------------------------------------
|
@@ -232,106 +223,65 @@ VALUE default_read_struct_end(VALUE protocol) {
|
|
232
223
|
return rb_funcall(protocol, read_struct_end_method_id, 0);
|
233
224
|
}
|
234
225
|
|
235
|
-
static void set_default_proto_function_pointers() {
|
236
|
-
default_mt = ALLOC(native_proto_method_table);
|
237
|
-
|
238
|
-
default_mt->write_field_begin = default_write_field_begin;
|
239
|
-
default_mt->write_field_stop = default_write_field_stop;
|
240
|
-
default_mt->write_map_begin = default_write_map_begin;
|
241
|
-
default_mt->write_map_end = default_write_map_end;
|
242
|
-
default_mt->write_list_begin = default_write_list_begin;
|
243
|
-
default_mt->write_list_end = default_write_list_end;
|
244
|
-
default_mt->write_set_begin = default_write_set_begin;
|
245
|
-
default_mt->write_set_end = default_write_set_end;
|
246
|
-
default_mt->write_byte = default_write_byte;
|
247
|
-
default_mt->write_bool = default_write_bool;
|
248
|
-
default_mt->write_i16 = default_write_i16;
|
249
|
-
default_mt->write_i32 = default_write_i32;
|
250
|
-
default_mt->write_i64 = default_write_i64;
|
251
|
-
default_mt->write_double = default_write_double;
|
252
|
-
default_mt->write_string = default_write_string;
|
253
|
-
default_mt->write_struct_begin = default_write_struct_begin;
|
254
|
-
default_mt->write_struct_end = default_write_struct_end;
|
255
|
-
default_mt->write_field_end = default_write_field_end;
|
256
|
-
|
257
|
-
default_mt->read_struct_begin = default_read_struct_begin;
|
258
|
-
default_mt->read_struct_end = default_read_struct_end;
|
259
|
-
default_mt->read_field_begin = default_read_field_begin;
|
260
|
-
default_mt->read_field_end = default_read_field_end;
|
261
|
-
default_mt->read_map_begin = default_read_map_begin;
|
262
|
-
default_mt->read_map_end = default_read_map_end;
|
263
|
-
default_mt->read_list_begin = default_read_list_begin;
|
264
|
-
default_mt->read_list_end = default_read_list_end;
|
265
|
-
default_mt->read_set_begin = default_read_set_begin;
|
266
|
-
default_mt->read_set_end = default_read_set_end;
|
267
|
-
default_mt->read_byte = default_read_byte;
|
268
|
-
default_mt->read_bool = default_read_bool;
|
269
|
-
default_mt->read_i16 = default_read_i16;
|
270
|
-
default_mt->read_i32 = default_read_i32;
|
271
|
-
default_mt->read_i64 = default_read_i64;
|
272
|
-
default_mt->read_double = default_read_double;
|
273
|
-
default_mt->read_string = default_read_string;
|
274
|
-
}
|
275
|
-
|
276
226
|
// end default protocol methods
|
277
227
|
|
278
|
-
|
228
|
+
static VALUE rb_thrift_union_write (VALUE self, VALUE protocol);
|
279
229
|
static VALUE rb_thrift_struct_write(VALUE self, VALUE protocol);
|
280
230
|
static void write_anything(int ttype, VALUE value, VALUE protocol, VALUE field_info);
|
281
231
|
|
282
232
|
VALUE get_field_value(VALUE obj, VALUE field_name) {
|
283
233
|
char name_buf[RSTRING_LEN(field_name) + 1];
|
284
|
-
|
234
|
+
|
285
235
|
name_buf[0] = '@';
|
286
236
|
strlcpy(&name_buf[1], RSTRING_PTR(field_name), sizeof(name_buf));
|
287
237
|
|
288
238
|
VALUE value = rb_ivar_get(obj, rb_intern(name_buf));
|
289
|
-
|
239
|
+
|
290
240
|
return value;
|
291
241
|
}
|
292
242
|
|
293
243
|
static void write_container(int ttype, VALUE field_info, VALUE value, VALUE protocol) {
|
294
244
|
int sz, i;
|
295
|
-
|
245
|
+
|
296
246
|
if (ttype == TTYPE_MAP) {
|
297
247
|
VALUE keys;
|
298
248
|
VALUE key;
|
299
249
|
VALUE val;
|
300
250
|
|
301
251
|
Check_Type(value, T_HASH);
|
302
|
-
|
252
|
+
|
303
253
|
VALUE key_info = rb_hash_aref(field_info, key_sym);
|
304
254
|
VALUE keytype_value = rb_hash_aref(key_info, type_sym);
|
305
255
|
int keytype = FIX2INT(keytype_value);
|
306
|
-
|
256
|
+
|
307
257
|
VALUE value_info = rb_hash_aref(field_info, value_sym);
|
308
258
|
VALUE valuetype_value = rb_hash_aref(value_info, type_sym);
|
309
259
|
int valuetype = FIX2INT(valuetype_value);
|
310
|
-
|
260
|
+
|
311
261
|
keys = rb_funcall(value, keys_method_id, 0);
|
312
|
-
|
262
|
+
|
313
263
|
sz = RARRAY_LEN(keys);
|
314
|
-
|
315
|
-
|
316
|
-
|
264
|
+
|
265
|
+
default_write_map_begin(protocol, keytype_value, valuetype_value, INT2FIX(sz));
|
266
|
+
|
317
267
|
for (i = 0; i < sz; i++) {
|
318
268
|
key = rb_ary_entry(keys, i);
|
319
269
|
val = rb_hash_aref(value, key);
|
320
|
-
|
270
|
+
|
321
271
|
if (IS_CONTAINER(keytype)) {
|
322
272
|
write_container(keytype, key_info, key, protocol);
|
323
273
|
} else {
|
324
274
|
write_anything(keytype, key, protocol, key_info);
|
325
275
|
}
|
326
|
-
|
276
|
+
|
327
277
|
if (IS_CONTAINER(valuetype)) {
|
328
278
|
write_container(valuetype, value_info, val, protocol);
|
329
279
|
} else {
|
330
280
|
write_anything(valuetype, val, protocol, value_info);
|
331
281
|
}
|
332
282
|
}
|
333
|
-
|
334
|
-
|
283
|
+
|
284
|
+
default_write_map_end(protocol);
|
335
285
|
} else if (ttype == TTYPE_LIST) {
|
336
286
|
Check_Type(value, T_ARRAY);
|
337
287
|
|
@@ -340,8 +290,8 @@ static void write_container(int ttype, VALUE field_info, VALUE value, VALUE prot
|
|
340
290
|
VALUE element_type_info = rb_hash_aref(field_info, element_sym);
|
341
291
|
VALUE element_type_value = rb_hash_aref(element_type_info, type_sym);
|
342
292
|
int element_type = FIX2INT(element_type_value);
|
343
|
-
|
344
|
-
|
293
|
+
|
294
|
+
default_write_list_begin(protocol, element_type_value, INT2FIX(sz));
|
345
295
|
for (i = 0; i < sz; ++i) {
|
346
296
|
VALUE val = rb_ary_entry(value, i);
|
347
297
|
if (IS_CONTAINER(element_type)) {
|
@@ -350,7 +300,7 @@ static void write_container(int ttype, VALUE field_info, VALUE value, VALUE prot
|
|
350
300
|
write_anything(element_type, val, protocol, element_type_info);
|
351
301
|
}
|
352
302
|
}
|
353
|
-
|
303
|
+
default_write_list_end(protocol);
|
354
304
|
} else if (ttype == TTYPE_SET) {
|
355
305
|
VALUE items;
|
356
306
|
|
@@ -370,9 +320,9 @@ static void write_container(int ttype, VALUE field_info, VALUE value, VALUE prot
|
|
370
320
|
VALUE element_type_info = rb_hash_aref(field_info, element_sym);
|
371
321
|
VALUE element_type_value = rb_hash_aref(element_type_info, type_sym);
|
372
322
|
int element_type = FIX2INT(element_type_value);
|
373
|
-
|
374
|
-
|
375
|
-
|
323
|
+
|
324
|
+
default_write_set_begin(protocol, element_type_value, INT2FIX(sz));
|
325
|
+
|
376
326
|
for (i = 0; i < sz; i++) {
|
377
327
|
VALUE val = rb_ary_entry(items, i);
|
378
328
|
if (IS_CONTAINER(element_type)) {
|
@@ -381,8 +331,8 @@ static void write_container(int ttype, VALUE field_info, VALUE value, VALUE prot
|
|
381
331
|
write_anything(element_type, val, protocol, element_type_info);
|
382
332
|
}
|
383
333
|
}
|
384
|
-
|
385
|
-
|
334
|
+
|
335
|
+
default_write_set_end(protocol);
|
386
336
|
} else {
|
387
337
|
rb_raise(rb_eNotImpError, "can't write container of type: %d", ttype);
|
388
338
|
}
|
@@ -390,23 +340,27 @@ static void write_container(int ttype, VALUE field_info, VALUE value, VALUE prot
|
|
390
340
|
|
391
341
|
static void write_anything(int ttype, VALUE value, VALUE protocol, VALUE field_info) {
|
392
342
|
if (ttype == TTYPE_BOOL) {
|
393
|
-
|
343
|
+
default_write_bool(protocol, value);
|
394
344
|
} else if (ttype == TTYPE_BYTE) {
|
395
|
-
|
345
|
+
default_write_byte(protocol, value);
|
396
346
|
} else if (ttype == TTYPE_I16) {
|
397
|
-
|
347
|
+
default_write_i16(protocol, value);
|
398
348
|
} else if (ttype == TTYPE_I32) {
|
399
|
-
|
349
|
+
default_write_i32(protocol, value);
|
400
350
|
} else if (ttype == TTYPE_I64) {
|
401
|
-
|
351
|
+
default_write_i64(protocol, value);
|
402
352
|
} else if (ttype == TTYPE_DOUBLE) {
|
403
|
-
|
353
|
+
default_write_double(protocol, value);
|
404
354
|
} else if (ttype == TTYPE_STRING) {
|
405
|
-
|
355
|
+
default_write_string(protocol, value);
|
406
356
|
} else if (IS_CONTAINER(ttype)) {
|
407
357
|
write_container(ttype, field_info, value, protocol);
|
408
358
|
} else if (ttype == TTYPE_STRUCT) {
|
409
|
-
|
359
|
+
if (rb_obj_is_kind_of(value, thrift_union_class)) {
|
360
|
+
rb_thrift_union_write(value, protocol);
|
361
|
+
} else {
|
362
|
+
rb_thrift_struct_write(value, protocol);
|
363
|
+
}
|
410
364
|
} else {
|
411
365
|
rb_raise(rb_eNotImpError, "Unknown type for binary_encoding: %d", ttype);
|
412
366
|
}
|
@@ -416,39 +370,40 @@ static VALUE rb_thrift_struct_write(VALUE self, VALUE protocol) {
|
|
416
370
|
// call validate
|
417
371
|
rb_funcall(self, validate_method_id, 0);
|
418
372
|
|
419
|
-
// check_native_proto_method_table(protocol);
|
420
|
-
|
421
373
|
// write struct begin
|
422
|
-
|
374
|
+
default_write_struct_begin(protocol, rb_class_name(CLASS_OF(self)));
|
423
375
|
|
424
376
|
// iterate through all the fields here
|
425
377
|
VALUE struct_fields = STRUCT_FIELDS(self);
|
378
|
+
|
426
379
|
VALUE struct_field_ids_unordered = rb_funcall(struct_fields, keys_method_id, 0);
|
427
380
|
VALUE struct_field_ids_ordered = rb_funcall(struct_field_ids_unordered, sort_method_id, 0);
|
428
381
|
|
429
382
|
int i = 0;
|
430
383
|
for (i=0; i < RARRAY_LEN(struct_field_ids_ordered); i++) {
|
431
384
|
VALUE field_id = rb_ary_entry(struct_field_ids_ordered, i);
|
385
|
+
|
432
386
|
VALUE field_info = rb_hash_aref(struct_fields, field_id);
|
433
387
|
|
434
388
|
VALUE ttype_value = rb_hash_aref(field_info, type_sym);
|
435
389
|
int ttype = FIX2INT(ttype_value);
|
436
390
|
VALUE field_name = rb_hash_aref(field_info, name_sym);
|
391
|
+
|
437
392
|
VALUE field_value = get_field_value(self, field_name);
|
438
393
|
|
439
394
|
if (!NIL_P(field_value)) {
|
440
|
-
|
441
|
-
|
395
|
+
default_write_field_begin(protocol, field_name, ttype_value, field_id);
|
396
|
+
|
442
397
|
write_anything(ttype, field_value, protocol, field_info);
|
443
|
-
|
444
|
-
|
398
|
+
|
399
|
+
default_write_field_end(protocol);
|
445
400
|
}
|
446
401
|
}
|
447
402
|
|
448
|
-
|
403
|
+
default_write_field_stop(protocol);
|
449
404
|
|
450
405
|
// write struct end
|
451
|
-
|
406
|
+
default_write_struct_end(protocol);
|
452
407
|
|
453
408
|
return Qnil;
|
454
409
|
}
|
@@ -457,6 +412,7 @@ static VALUE rb_thrift_struct_write(VALUE self, VALUE protocol) {
|
|
457
412
|
// Reading section
|
458
413
|
//-------------------------------------------
|
459
414
|
|
415
|
+
static VALUE rb_thrift_union_read(VALUE self, VALUE protocol);
|
460
416
|
static VALUE rb_thrift_struct_read(VALUE self, VALUE protocol);
|
461
417
|
|
462
418
|
static void set_field_value(VALUE obj, VALUE field_name, VALUE value) {
|
@@ -472,27 +428,32 @@ static VALUE read_anything(VALUE protocol, int ttype, VALUE field_info) {
|
|
472
428
|
VALUE result = Qnil;
|
473
429
|
|
474
430
|
if (ttype == TTYPE_BOOL) {
|
475
|
-
result =
|
431
|
+
result = default_read_bool(protocol);
|
476
432
|
} else if (ttype == TTYPE_BYTE) {
|
477
|
-
result =
|
433
|
+
result = default_read_byte(protocol);
|
478
434
|
} else if (ttype == TTYPE_I16) {
|
479
|
-
result =
|
435
|
+
result = default_read_i16(protocol);
|
480
436
|
} else if (ttype == TTYPE_I32) {
|
481
|
-
result =
|
437
|
+
result = default_read_i32(protocol);
|
482
438
|
} else if (ttype == TTYPE_I64) {
|
483
|
-
result =
|
439
|
+
result = default_read_i64(protocol);
|
484
440
|
} else if (ttype == TTYPE_STRING) {
|
485
|
-
result =
|
441
|
+
result = default_read_string(protocol);
|
486
442
|
} else if (ttype == TTYPE_DOUBLE) {
|
487
|
-
result =
|
443
|
+
result = default_read_double(protocol);
|
488
444
|
} else if (ttype == TTYPE_STRUCT) {
|
489
445
|
VALUE klass = rb_hash_aref(field_info, class_sym);
|
490
446
|
result = rb_class_new_instance(0, NULL, klass);
|
491
|
-
|
447
|
+
|
448
|
+
if (rb_obj_is_kind_of(result, thrift_union_class)) {
|
449
|
+
rb_thrift_union_read(result, protocol);
|
450
|
+
} else {
|
451
|
+
rb_thrift_struct_read(result, protocol);
|
452
|
+
}
|
492
453
|
} else if (ttype == TTYPE_MAP) {
|
493
454
|
int i;
|
494
455
|
|
495
|
-
VALUE map_header =
|
456
|
+
VALUE map_header = default_read_map_begin(protocol);
|
496
457
|
int key_ttype = FIX2INT(rb_ary_entry(map_header, 0));
|
497
458
|
int value_ttype = FIX2INT(rb_ary_entry(map_header, 1));
|
498
459
|
int num_entries = FIX2INT(rb_ary_entry(map_header, 2));
|
@@ -511,11 +472,11 @@ static VALUE read_anything(VALUE protocol, int ttype, VALUE field_info) {
|
|
511
472
|
rb_hash_aset(result, key, val);
|
512
473
|
}
|
513
474
|
|
514
|
-
|
475
|
+
default_read_map_end(protocol);
|
515
476
|
} else if (ttype == TTYPE_LIST) {
|
516
477
|
int i;
|
517
478
|
|
518
|
-
VALUE list_header =
|
479
|
+
VALUE list_header = default_read_list_begin(protocol);
|
519
480
|
int element_ttype = FIX2INT(rb_ary_entry(list_header, 0));
|
520
481
|
int num_elements = FIX2INT(rb_ary_entry(list_header, 1));
|
521
482
|
result = rb_ary_new2(num_elements);
|
@@ -524,13 +485,12 @@ static VALUE read_anything(VALUE protocol, int ttype, VALUE field_info) {
|
|
524
485
|
rb_ary_push(result, read_anything(protocol, element_ttype, rb_hash_aref(field_info, element_sym)));
|
525
486
|
}
|
526
487
|
|
527
|
-
|
528
|
-
mt->read_list_end(protocol);
|
488
|
+
default_read_list_end(protocol);
|
529
489
|
} else if (ttype == TTYPE_SET) {
|
530
490
|
VALUE items;
|
531
491
|
int i;
|
532
492
|
|
533
|
-
VALUE set_header =
|
493
|
+
VALUE set_header = default_read_set_begin(protocol);
|
534
494
|
int element_ttype = FIX2INT(rb_ary_entry(set_header, 0));
|
535
495
|
int num_elements = FIX2INT(rb_ary_entry(set_header, 1));
|
536
496
|
items = rb_ary_new2(num_elements);
|
@@ -539,8 +499,7 @@ static VALUE read_anything(VALUE protocol, int ttype, VALUE field_info) {
|
|
539
499
|
rb_ary_push(items, read_anything(protocol, element_ttype, rb_hash_aref(field_info, element_sym)));
|
540
500
|
}
|
541
501
|
|
542
|
-
|
543
|
-
mt->read_set_end(protocol);
|
502
|
+
default_read_set_end(protocol);
|
544
503
|
|
545
504
|
result = rb_class_new_instance(1, &items, rb_cSet);
|
546
505
|
} else {
|
@@ -551,16 +510,14 @@ static VALUE read_anything(VALUE protocol, int ttype, VALUE field_info) {
|
|
551
510
|
}
|
552
511
|
|
553
512
|
static VALUE rb_thrift_struct_read(VALUE self, VALUE protocol) {
|
554
|
-
// check_native_proto_method_table(protocol);
|
555
|
-
|
556
513
|
// read struct begin
|
557
|
-
|
514
|
+
default_read_struct_begin(protocol);
|
558
515
|
|
559
516
|
VALUE struct_fields = STRUCT_FIELDS(self);
|
560
517
|
|
561
518
|
// read each field
|
562
519
|
while (true) {
|
563
|
-
VALUE field_header =
|
520
|
+
VALUE field_header = default_read_field_begin(protocol);
|
564
521
|
VALUE field_type_value = rb_ary_entry(field_header, 1);
|
565
522
|
int field_type = FIX2INT(field_type_value);
|
566
523
|
|
@@ -585,15 +542,102 @@ static VALUE rb_thrift_struct_read(VALUE self, VALUE protocol) {
|
|
585
542
|
}
|
586
543
|
|
587
544
|
// read field end
|
588
|
-
|
545
|
+
default_read_field_end(protocol);
|
546
|
+
}
|
547
|
+
|
548
|
+
// read struct end
|
549
|
+
default_read_struct_end(protocol);
|
550
|
+
|
551
|
+
// call validate
|
552
|
+
rb_funcall(self, validate_method_id, 0);
|
553
|
+
|
554
|
+
return Qnil;
|
555
|
+
}
|
556
|
+
|
557
|
+
|
558
|
+
// --------------------------------
|
559
|
+
// Union section
|
560
|
+
// --------------------------------
|
561
|
+
|
562
|
+
static VALUE rb_thrift_union_read(VALUE self, VALUE protocol) {
|
563
|
+
// read struct begin
|
564
|
+
default_read_struct_begin(protocol);
|
565
|
+
|
566
|
+
VALUE struct_fields = STRUCT_FIELDS(self);
|
567
|
+
|
568
|
+
VALUE field_header = default_read_field_begin(protocol);
|
569
|
+
VALUE field_type_value = rb_ary_entry(field_header, 1);
|
570
|
+
int field_type = FIX2INT(field_type_value);
|
571
|
+
|
572
|
+
// make sure we got a type we expected
|
573
|
+
VALUE field_info = rb_hash_aref(struct_fields, rb_ary_entry(field_header, 2));
|
574
|
+
|
575
|
+
if (!NIL_P(field_info)) {
|
576
|
+
int specified_type = FIX2INT(rb_hash_aref(field_info, type_sym));
|
577
|
+
if (field_type == specified_type) {
|
578
|
+
// read the value
|
579
|
+
VALUE name = rb_hash_aref(field_info, name_sym);
|
580
|
+
rb_iv_set(self, "@setfield", ID2SYM(rb_intern(RSTRING_PTR(name))));
|
581
|
+
rb_iv_set(self, "@value", read_anything(protocol, field_type, field_info));
|
582
|
+
} else {
|
583
|
+
rb_funcall(protocol, skip_method_id, 1, field_type_value);
|
584
|
+
}
|
585
|
+
} else {
|
586
|
+
rb_funcall(protocol, skip_method_id, 1, field_type_value);
|
589
587
|
}
|
590
588
|
|
589
|
+
// read field end
|
590
|
+
default_read_field_end(protocol);
|
591
|
+
|
592
|
+
field_header = default_read_field_begin(protocol);
|
593
|
+
field_type_value = rb_ary_entry(field_header, 1);
|
594
|
+
field_type = FIX2INT(field_type_value);
|
595
|
+
|
596
|
+
if (field_type != TTYPE_STOP) {
|
597
|
+
rb_raise(rb_eRuntimeError, "too many fields in union!");
|
598
|
+
}
|
599
|
+
|
600
|
+
// read field end
|
601
|
+
default_read_field_end(protocol);
|
602
|
+
|
591
603
|
// read struct end
|
592
|
-
|
604
|
+
default_read_struct_end(protocol);
|
605
|
+
|
606
|
+
// call validate
|
607
|
+
rb_funcall(self, validate_method_id, 0);
|
608
|
+
|
609
|
+
return Qnil;
|
610
|
+
}
|
593
611
|
|
612
|
+
static VALUE rb_thrift_union_write(VALUE self, VALUE protocol) {
|
594
613
|
// call validate
|
595
614
|
rb_funcall(self, validate_method_id, 0);
|
596
615
|
|
616
|
+
// write struct begin
|
617
|
+
default_write_struct_begin(protocol, rb_class_name(CLASS_OF(self)));
|
618
|
+
|
619
|
+
VALUE struct_fields = STRUCT_FIELDS(self);
|
620
|
+
|
621
|
+
VALUE setfield = rb_ivar_get(self, setfield_id);
|
622
|
+
VALUE setvalue = rb_ivar_get(self, setvalue_id);
|
623
|
+
VALUE field_id = rb_funcall(self, name_to_id_method_id, 1, rb_funcall(setfield, to_s_method_id, 0));
|
624
|
+
|
625
|
+
VALUE field_info = rb_hash_aref(struct_fields, field_id);
|
626
|
+
|
627
|
+
VALUE ttype_value = rb_hash_aref(field_info, type_sym);
|
628
|
+
int ttype = FIX2INT(ttype_value);
|
629
|
+
|
630
|
+
default_write_field_begin(protocol, setfield, ttype_value, field_id);
|
631
|
+
|
632
|
+
write_anything(ttype, setvalue, protocol, field_info);
|
633
|
+
|
634
|
+
default_write_field_end(protocol);
|
635
|
+
|
636
|
+
default_write_field_stop(protocol);
|
637
|
+
|
638
|
+
// write struct end
|
639
|
+
default_write_struct_end(protocol);
|
640
|
+
|
597
641
|
return Qnil;
|
598
642
|
}
|
599
643
|
|
@@ -603,7 +647,14 @@ void Init_struct() {
|
|
603
647
|
rb_define_method(struct_module, "write", rb_thrift_struct_write, 1);
|
604
648
|
rb_define_method(struct_module, "read", rb_thrift_struct_read, 1);
|
605
649
|
|
606
|
-
|
607
|
-
|
608
|
-
|
650
|
+
thrift_union_class = rb_const_get(thrift_module, rb_intern("Union"));
|
651
|
+
|
652
|
+
rb_define_method(thrift_union_class, "write", rb_thrift_union_write, 1);
|
653
|
+
rb_define_method(thrift_union_class, "read", rb_thrift_union_read, 1);
|
609
654
|
|
655
|
+
setfield_id = rb_intern("@setfield");
|
656
|
+
setvalue_id = rb_intern("@value");
|
657
|
+
|
658
|
+
to_s_method_id = rb_intern("to_s");
|
659
|
+
name_to_id_method_id = rb_intern("name_to_id");
|
660
|
+
}
|