thrift 0.6.0 → 0.7.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.
Files changed (40) hide show
  1. data/InstalledFiles +1 -0
  2. data/Makefile +512 -0
  3. data/Makefile.am +3 -1
  4. data/Makefile.in +117 -45
  5. data/Manifest +17 -0
  6. data/Rakefile +6 -8
  7. data/benchmark/gen-rb/benchmark_constants.rb +10 -0
  8. data/benchmark/gen-rb/benchmark_service.rb +80 -0
  9. data/benchmark/gen-rb/benchmark_types.rb +9 -0
  10. data/debug_proto_test/gen-rb/debug_proto_test_constants.rb +273 -0
  11. data/debug_proto_test/gen-rb/debug_proto_test_types.rb +705 -0
  12. data/debug_proto_test/gen-rb/empty_service.rb +24 -0
  13. data/debug_proto_test/gen-rb/inherited.rb +79 -0
  14. data/debug_proto_test/gen-rb/reverse_order_service.rb +82 -0
  15. data/debug_proto_test/gen-rb/service_for_exception_with_a_map.rb +81 -0
  16. data/debug_proto_test/gen-rb/srv.rb +330 -0
  17. data/ext/binary_protocol_accelerated.c +24 -11
  18. data/ext/compact_protocol.c +14 -11
  19. data/ext/constants.h +1 -0
  20. data/ext/memory_buffer.c +56 -1
  21. data/ext/struct.c +76 -19
  22. data/ext/thrift_native.c +2 -0
  23. data/lib/thrift/exceptions.rb +3 -1
  24. data/lib/thrift/protocol/binary_protocol.rb +14 -10
  25. data/lib/thrift/protocol/compact_protocol.rb +7 -4
  26. data/lib/thrift/server/nonblocking_server.rb +15 -5
  27. data/lib/thrift/struct.rb +9 -6
  28. data/lib/thrift/struct_union.rb +47 -14
  29. data/lib/thrift/transport/base_transport.rb +39 -2
  30. data/lib/thrift/transport/buffered_transport.rb +31 -0
  31. data/lib/thrift/transport/framed_transport.rb +26 -0
  32. data/lib/thrift/transport/memory_buffer_transport.rb +29 -0
  33. data/spec/binary_protocol_spec.rb +2 -4
  34. data/spec/gen-rb/nonblocking_service.rb +272 -0
  35. data/spec/gen-rb/thrift_spec_constants.rb +10 -0
  36. data/spec/gen-rb/thrift_spec_types.rb +345 -0
  37. data/spec/spec_helper.rb +1 -3
  38. data/thrift.gemspec +10 -11
  39. data/tmp/thrift-0.7.0.gem +0 -0
  40. metadata +22 -8
@@ -52,6 +52,32 @@ module Thrift
52
52
  @rbuf.slice(@index - sz, sz) || ''
53
53
  end
54
54
 
55
+ def read_byte
56
+ return @transport.read_byte() unless @read
57
+
58
+ read_frame if @index >= @rbuf.length
59
+
60
+ # The read buffer has some data now, read a single byte. Using get_string_byte() avoids
61
+ # allocating a temp string of size 1 unnecessarily.
62
+ @index += 1
63
+ return ::Thrift::TransportUtils.get_string_byte(@rbuf, @index - 1)
64
+ end
65
+
66
+ def read_into_buffer(buffer, size)
67
+ i = 0
68
+ while i < size
69
+ read_frame if @index >= @rbuf.length
70
+
71
+ # The read buffer has some data now, so copy bytes over to the output buffer.
72
+ byte = ::Thrift::TransportUtils.get_string_byte(@rbuf, @index)
73
+ ::Thrift::TransportUtils.set_string_byte(buffer, i, byte)
74
+ @index += 1
75
+ i += 1
76
+ end
77
+ i
78
+ end
79
+
80
+
55
81
  def write(buf,sz=nil)
56
82
  return @transport.write(buf) unless @write
57
83
 
@@ -70,6 +70,35 @@ module Thrift
70
70
  data
71
71
  end
72
72
 
73
+ def read_byte
74
+ raise EOFError.new("Not enough bytes remain in buffer") if @index >= @buf.size
75
+ val = ::Thrift::TransportUtils.get_string_byte(@buf, @index)
76
+ @index += 1
77
+ if @index >= GARBAGE_BUFFER_SIZE
78
+ @buf = @buf.slice(@index..-1)
79
+ @index = 0
80
+ end
81
+ val
82
+ end
83
+
84
+ def read_into_buffer(buffer, size)
85
+ i = 0
86
+ while i < size
87
+ raise EOFError.new("Not enough bytes remain in buffer") if @index >= @buf.size
88
+
89
+ # The read buffer has some data now, so copy bytes over to the output buffer.
90
+ byte = ::Thrift::TransportUtils.get_string_byte(@buf, @index)
91
+ ::Thrift::TransportUtils.set_string_byte(buffer, i, byte)
92
+ @index += 1
93
+ i += 1
94
+ end
95
+ if @index >= GARBAGE_BUFFER_SIZE
96
+ @buf = @buf.slice(@index..-1)
97
+ @index = 0
98
+ end
99
+ i
100
+ end
101
+
73
102
  def write(wbuf)
74
103
  @buf << wbuf
75
104
  end
@@ -31,10 +31,8 @@ class ThriftBinaryProtocolSpec < Spec::ExampleGroup
31
31
  end
32
32
 
33
33
  it "should read a message header" do
34
- @trans.should_receive(:read_all).exactly(2).times.and_return(
35
- [protocol_class.const_get(:VERSION_1) | Thrift::MessageTypes::REPLY].pack('N'),
36
- [42].pack('N')
37
- )
34
+ @trans.write([protocol_class.const_get(:VERSION_1) | Thrift::MessageTypes::REPLY].pack('N'))
35
+ @trans.write([42].pack('N'))
38
36
  @prot.should_receive(:read_string).and_return('testMessage')
39
37
  @prot.read_message_begin.should == ['testMessage', Thrift::MessageTypes::REPLY, 42]
40
38
  end
@@ -0,0 +1,272 @@
1
+ #
2
+ # Autogenerated by Thrift Compiler (0.7.0)
3
+ #
4
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
+ #
6
+
7
+ require 'thrift'
8
+ require 'thrift_spec_types'
9
+
10
+ module SpecNamespace
11
+ module NonblockingService
12
+ class Client
13
+ include ::Thrift::Client
14
+
15
+ def greeting(english)
16
+ send_greeting(english)
17
+ return recv_greeting()
18
+ end
19
+
20
+ def send_greeting(english)
21
+ send_message('greeting', Greeting_args, :english => english)
22
+ end
23
+
24
+ def recv_greeting()
25
+ result = receive_message(Greeting_result)
26
+ return result.success unless result.success.nil?
27
+ raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'greeting failed: unknown result')
28
+ end
29
+
30
+ def block()
31
+ send_block()
32
+ return recv_block()
33
+ end
34
+
35
+ def send_block()
36
+ send_message('block', Block_args)
37
+ end
38
+
39
+ def recv_block()
40
+ result = receive_message(Block_result)
41
+ return result.success unless result.success.nil?
42
+ raise ::Thrift::ApplicationException.new(::Thrift::ApplicationException::MISSING_RESULT, 'block failed: unknown result')
43
+ end
44
+
45
+ def unblock(n)
46
+ send_unblock(n)
47
+ end
48
+
49
+ def send_unblock(n)
50
+ send_message('unblock', Unblock_args, :n => n)
51
+ end
52
+ def shutdown()
53
+ send_shutdown()
54
+ end
55
+
56
+ def send_shutdown()
57
+ send_message('shutdown', Shutdown_args)
58
+ end
59
+ def sleep(seconds)
60
+ send_sleep(seconds)
61
+ recv_sleep()
62
+ end
63
+
64
+ def send_sleep(seconds)
65
+ send_message('sleep', Sleep_args, :seconds => seconds)
66
+ end
67
+
68
+ def recv_sleep()
69
+ result = receive_message(Sleep_result)
70
+ return
71
+ end
72
+
73
+ end
74
+
75
+ class Processor
76
+ include ::Thrift::Processor
77
+
78
+ def process_greeting(seqid, iprot, oprot)
79
+ args = read_args(iprot, Greeting_args)
80
+ result = Greeting_result.new()
81
+ result.success = @handler.greeting(args.english)
82
+ write_result(result, oprot, 'greeting', seqid)
83
+ end
84
+
85
+ def process_block(seqid, iprot, oprot)
86
+ args = read_args(iprot, Block_args)
87
+ result = Block_result.new()
88
+ result.success = @handler.block()
89
+ write_result(result, oprot, 'block', seqid)
90
+ end
91
+
92
+ def process_unblock(seqid, iprot, oprot)
93
+ args = read_args(iprot, Unblock_args)
94
+ @handler.unblock(args.n)
95
+ return
96
+ end
97
+
98
+ def process_shutdown(seqid, iprot, oprot)
99
+ args = read_args(iprot, Shutdown_args)
100
+ @handler.shutdown()
101
+ return
102
+ end
103
+
104
+ def process_sleep(seqid, iprot, oprot)
105
+ args = read_args(iprot, Sleep_args)
106
+ result = Sleep_result.new()
107
+ @handler.sleep(args.seconds)
108
+ write_result(result, oprot, 'sleep', seqid)
109
+ end
110
+
111
+ end
112
+
113
+ # HELPER FUNCTIONS AND STRUCTURES
114
+
115
+ class Greeting_args
116
+ include ::Thrift::Struct, ::Thrift::Struct_Union
117
+ ENGLISH = 1
118
+
119
+ FIELDS = {
120
+ ENGLISH => {:type => ::Thrift::Types::BOOL, :name => 'english'}
121
+ }
122
+
123
+ def struct_fields; FIELDS; end
124
+
125
+ def validate
126
+ end
127
+
128
+ ::Thrift::Struct.generate_accessors self
129
+ end
130
+
131
+ class Greeting_result
132
+ include ::Thrift::Struct, ::Thrift::Struct_Union
133
+ SUCCESS = 0
134
+
135
+ FIELDS = {
136
+ SUCCESS => {:type => ::Thrift::Types::STRUCT, :name => 'success', :class => SpecNamespace::Hello}
137
+ }
138
+
139
+ def struct_fields; FIELDS; end
140
+
141
+ def validate
142
+ end
143
+
144
+ ::Thrift::Struct.generate_accessors self
145
+ end
146
+
147
+ class Block_args
148
+ include ::Thrift::Struct, ::Thrift::Struct_Union
149
+
150
+ FIELDS = {
151
+
152
+ }
153
+
154
+ def struct_fields; FIELDS; end
155
+
156
+ def validate
157
+ end
158
+
159
+ ::Thrift::Struct.generate_accessors self
160
+ end
161
+
162
+ class Block_result
163
+ include ::Thrift::Struct, ::Thrift::Struct_Union
164
+ SUCCESS = 0
165
+
166
+ FIELDS = {
167
+ SUCCESS => {:type => ::Thrift::Types::BOOL, :name => 'success'}
168
+ }
169
+
170
+ def struct_fields; FIELDS; end
171
+
172
+ def validate
173
+ end
174
+
175
+ ::Thrift::Struct.generate_accessors self
176
+ end
177
+
178
+ class Unblock_args
179
+ include ::Thrift::Struct, ::Thrift::Struct_Union
180
+ N = 1
181
+
182
+ FIELDS = {
183
+ N => {:type => ::Thrift::Types::I32, :name => 'n'}
184
+ }
185
+
186
+ def struct_fields; FIELDS; end
187
+
188
+ def validate
189
+ end
190
+
191
+ ::Thrift::Struct.generate_accessors self
192
+ end
193
+
194
+ class Unblock_result
195
+ include ::Thrift::Struct, ::Thrift::Struct_Union
196
+
197
+ FIELDS = {
198
+
199
+ }
200
+
201
+ def struct_fields; FIELDS; end
202
+
203
+ def validate
204
+ end
205
+
206
+ ::Thrift::Struct.generate_accessors self
207
+ end
208
+
209
+ class Shutdown_args
210
+ include ::Thrift::Struct, ::Thrift::Struct_Union
211
+
212
+ FIELDS = {
213
+
214
+ }
215
+
216
+ def struct_fields; FIELDS; end
217
+
218
+ def validate
219
+ end
220
+
221
+ ::Thrift::Struct.generate_accessors self
222
+ end
223
+
224
+ class Shutdown_result
225
+ include ::Thrift::Struct, ::Thrift::Struct_Union
226
+
227
+ FIELDS = {
228
+
229
+ }
230
+
231
+ def struct_fields; FIELDS; end
232
+
233
+ def validate
234
+ end
235
+
236
+ ::Thrift::Struct.generate_accessors self
237
+ end
238
+
239
+ class Sleep_args
240
+ include ::Thrift::Struct, ::Thrift::Struct_Union
241
+ SECONDS = 1
242
+
243
+ FIELDS = {
244
+ SECONDS => {:type => ::Thrift::Types::DOUBLE, :name => 'seconds'}
245
+ }
246
+
247
+ def struct_fields; FIELDS; end
248
+
249
+ def validate
250
+ end
251
+
252
+ ::Thrift::Struct.generate_accessors self
253
+ end
254
+
255
+ class Sleep_result
256
+ include ::Thrift::Struct, ::Thrift::Struct_Union
257
+
258
+ FIELDS = {
259
+
260
+ }
261
+
262
+ def struct_fields; FIELDS; end
263
+
264
+ def validate
265
+ end
266
+
267
+ ::Thrift::Struct.generate_accessors self
268
+ end
269
+
270
+ end
271
+
272
+ end
@@ -0,0 +1,10 @@
1
+ #
2
+ # Autogenerated by Thrift Compiler (0.7.0)
3
+ #
4
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
+ #
6
+
7
+ require 'thrift_spec_types'
8
+
9
+ module SpecNamespace
10
+ end
@@ -0,0 +1,345 @@
1
+ #
2
+ # Autogenerated by Thrift Compiler (0.7.0)
3
+ #
4
+ # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
+ #
6
+
7
+
8
+ module SpecNamespace
9
+ module SomeEnum
10
+ ONE = 0
11
+ TWO = 1
12
+ VALUE_MAP = {0 => "ONE", 1 => "TWO"}
13
+ VALID_VALUES = Set.new([ONE, TWO]).freeze
14
+ end
15
+
16
+ class Hello
17
+ include ::Thrift::Struct, ::Thrift::Struct_Union
18
+ GREETING = 1
19
+
20
+ FIELDS = {
21
+ GREETING => {:type => ::Thrift::Types::STRING, :name => 'greeting', :default => %q"hello world"}
22
+ }
23
+
24
+ def struct_fields; FIELDS; end
25
+
26
+ def validate
27
+ end
28
+
29
+ ::Thrift::Struct.generate_accessors self
30
+ end
31
+
32
+ class StructWithSomeEnum
33
+ include ::Thrift::Struct, ::Thrift::Struct_Union
34
+ SOME_ENUM = 1
35
+
36
+ FIELDS = {
37
+ SOME_ENUM => {:type => ::Thrift::Types::I32, :name => 'some_enum', :enum_class => SpecNamespace::SomeEnum}
38
+ }
39
+
40
+ def struct_fields; FIELDS; end
41
+
42
+ def validate
43
+ unless @some_enum.nil? || SpecNamespace::SomeEnum::VALID_VALUES.include?(@some_enum)
44
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field some_enum!')
45
+ end
46
+ end
47
+
48
+ ::Thrift::Struct.generate_accessors self
49
+ end
50
+
51
+ class TestUnion < ::Thrift::Union
52
+ include ::Thrift::Struct_Union
53
+ class << self
54
+ def string_field(val)
55
+ TestUnion.new(:string_field, val)
56
+ end
57
+
58
+ def i32_field(val)
59
+ TestUnion.new(:i32_field, val)
60
+ end
61
+
62
+ def other_i32_field(val)
63
+ TestUnion.new(:other_i32_field, val)
64
+ end
65
+
66
+ def enum_field(val)
67
+ TestUnion.new(:enum_field, val)
68
+ end
69
+
70
+ def binary_field(val)
71
+ TestUnion.new(:binary_field, val)
72
+ end
73
+ end
74
+
75
+ STRING_FIELD = 1
76
+ I32_FIELD = 2
77
+ OTHER_I32_FIELD = 3
78
+ ENUM_FIELD = 4
79
+ BINARY_FIELD = 5
80
+
81
+ FIELDS = {
82
+ # A doc string
83
+ STRING_FIELD => {:type => ::Thrift::Types::STRING, :name => 'string_field'},
84
+ I32_FIELD => {:type => ::Thrift::Types::I32, :name => 'i32_field'},
85
+ OTHER_I32_FIELD => {:type => ::Thrift::Types::I32, :name => 'other_i32_field'},
86
+ ENUM_FIELD => {:type => ::Thrift::Types::I32, :name => 'enum_field', :enum_class => SpecNamespace::SomeEnum},
87
+ BINARY_FIELD => {:type => ::Thrift::Types::STRING, :name => 'binary_field', :binary => true}
88
+ }
89
+
90
+ def struct_fields; FIELDS; end
91
+
92
+ def validate
93
+ raise(StandardError, 'Union fields are not set.') if get_set_field.nil? || get_value.nil?
94
+ if get_set_field == :enum_field
95
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field enum_field!') unless SpecNamespace::SomeEnum::VALID_VALUES.include?(get_value)
96
+ end
97
+ end
98
+
99
+ ::Thrift::Union.generate_accessors self
100
+ end
101
+
102
+ class Foo
103
+ include ::Thrift::Struct, ::Thrift::Struct_Union
104
+ SIMPLE = 1
105
+ WORDS = 2
106
+ HELLO = 3
107
+ INTS = 4
108
+ COMPLEX = 5
109
+ SHORTS = 6
110
+ OPT_STRING = 7
111
+ MY_BOOL = 8
112
+
113
+ FIELDS = {
114
+ SIMPLE => {:type => ::Thrift::Types::I32, :name => 'simple', :default => 53},
115
+ WORDS => {:type => ::Thrift::Types::STRING, :name => 'words', :default => %q"words"},
116
+ HELLO => {:type => ::Thrift::Types::STRUCT, :name => 'hello', :default => SpecNamespace::Hello.new({
117
+ %q"greeting" => %q"hello, world!",
118
+ }), :class => SpecNamespace::Hello},
119
+ INTS => {:type => ::Thrift::Types::LIST, :name => 'ints', :default => [
120
+ 1,
121
+ 2,
122
+ 2,
123
+ 3,
124
+ ], :element => {:type => ::Thrift::Types::I32}},
125
+ COMPLEX => {:type => ::Thrift::Types::MAP, :name => 'complex', :key => {:type => ::Thrift::Types::I32}, :value => {:type => ::Thrift::Types::MAP, :key => {:type => ::Thrift::Types::STRING}, :value => {:type => ::Thrift::Types::DOUBLE}}},
126
+ SHORTS => {:type => ::Thrift::Types::SET, :name => 'shorts', :default => Set.new([
127
+ 5,
128
+ 17,
129
+ 239,
130
+ ]), :element => {:type => ::Thrift::Types::I16}},
131
+ OPT_STRING => {:type => ::Thrift::Types::STRING, :name => 'opt_string', :optional => true},
132
+ MY_BOOL => {:type => ::Thrift::Types::BOOL, :name => 'my_bool'}
133
+ }
134
+
135
+ def struct_fields; FIELDS; end
136
+
137
+ def validate
138
+ end
139
+
140
+ ::Thrift::Struct.generate_accessors self
141
+ end
142
+
143
+ class Foo2
144
+ include ::Thrift::Struct, ::Thrift::Struct_Union
145
+ MY_BINARY = 1
146
+
147
+ FIELDS = {
148
+ MY_BINARY => {:type => ::Thrift::Types::STRING, :name => 'my_binary', :binary => true}
149
+ }
150
+
151
+ def struct_fields; FIELDS; end
152
+
153
+ def validate
154
+ end
155
+
156
+ ::Thrift::Struct.generate_accessors self
157
+ end
158
+
159
+ class BoolStruct
160
+ include ::Thrift::Struct, ::Thrift::Struct_Union
161
+ YESNO = 1
162
+
163
+ FIELDS = {
164
+ YESNO => {:type => ::Thrift::Types::BOOL, :name => 'yesno', :default => true}
165
+ }
166
+
167
+ def struct_fields; FIELDS; end
168
+
169
+ def validate
170
+ end
171
+
172
+ ::Thrift::Struct.generate_accessors self
173
+ end
174
+
175
+ class SimpleList
176
+ include ::Thrift::Struct, ::Thrift::Struct_Union
177
+ BOOLS = 1
178
+ BYTES = 2
179
+ I16S = 3
180
+ I32S = 4
181
+ I64S = 5
182
+ DOUBLES = 6
183
+ STRINGS = 7
184
+ MAPS = 8
185
+ LISTS = 9
186
+ SETS = 10
187
+ HELLOS = 11
188
+
189
+ FIELDS = {
190
+ BOOLS => {:type => ::Thrift::Types::LIST, :name => 'bools', :element => {:type => ::Thrift::Types::BOOL}},
191
+ BYTES => {:type => ::Thrift::Types::LIST, :name => 'bytes', :element => {:type => ::Thrift::Types::BYTE}},
192
+ I16S => {:type => ::Thrift::Types::LIST, :name => 'i16s', :element => {:type => ::Thrift::Types::I16}},
193
+ I32S => {:type => ::Thrift::Types::LIST, :name => 'i32s', :element => {:type => ::Thrift::Types::I32}},
194
+ I64S => {:type => ::Thrift::Types::LIST, :name => 'i64s', :element => {:type => ::Thrift::Types::I64}},
195
+ DOUBLES => {:type => ::Thrift::Types::LIST, :name => 'doubles', :element => {:type => ::Thrift::Types::DOUBLE}},
196
+ STRINGS => {:type => ::Thrift::Types::LIST, :name => 'strings', :element => {:type => ::Thrift::Types::STRING}},
197
+ MAPS => {:type => ::Thrift::Types::LIST, :name => 'maps', :element => {:type => ::Thrift::Types::MAP, :key => {:type => ::Thrift::Types::I16}, :value => {:type => ::Thrift::Types::I16}}},
198
+ LISTS => {:type => ::Thrift::Types::LIST, :name => 'lists', :element => {:type => ::Thrift::Types::LIST, :element => {:type => ::Thrift::Types::I16}}},
199
+ SETS => {:type => ::Thrift::Types::LIST, :name => 'sets', :element => {:type => ::Thrift::Types::SET, :element => {:type => ::Thrift::Types::I16}}},
200
+ HELLOS => {:type => ::Thrift::Types::LIST, :name => 'hellos', :element => {:type => ::Thrift::Types::STRUCT, :class => SpecNamespace::Hello}}
201
+ }
202
+
203
+ def struct_fields; FIELDS; end
204
+
205
+ def validate
206
+ end
207
+
208
+ ::Thrift::Struct.generate_accessors self
209
+ end
210
+
211
+ class Xception < ::Thrift::Exception
212
+ include ::Thrift::Struct, ::Thrift::Struct_Union
213
+ MESSAGE = 1
214
+ CODE = 2
215
+
216
+ FIELDS = {
217
+ MESSAGE => {:type => ::Thrift::Types::STRING, :name => 'message'},
218
+ CODE => {:type => ::Thrift::Types::I32, :name => 'code', :default => 1}
219
+ }
220
+
221
+ def struct_fields; FIELDS; end
222
+
223
+ def validate
224
+ end
225
+
226
+ ::Thrift::Struct.generate_accessors self
227
+ end
228
+
229
+ class My_union < ::Thrift::Union
230
+ include ::Thrift::Struct_Union
231
+ class << self
232
+ def im_true(val)
233
+ My_union.new(:im_true, val)
234
+ end
235
+
236
+ def a_bite(val)
237
+ My_union.new(:a_bite, val)
238
+ end
239
+
240
+ def integer16(val)
241
+ My_union.new(:integer16, val)
242
+ end
243
+
244
+ def integer32(val)
245
+ My_union.new(:integer32, val)
246
+ end
247
+
248
+ def integer64(val)
249
+ My_union.new(:integer64, val)
250
+ end
251
+
252
+ def double_precision(val)
253
+ My_union.new(:double_precision, val)
254
+ end
255
+
256
+ def some_characters(val)
257
+ My_union.new(:some_characters, val)
258
+ end
259
+
260
+ def other_i32(val)
261
+ My_union.new(:other_i32, val)
262
+ end
263
+
264
+ def some_enum(val)
265
+ My_union.new(:some_enum, val)
266
+ end
267
+
268
+ def my_map(val)
269
+ My_union.new(:my_map, val)
270
+ end
271
+ end
272
+
273
+ IM_TRUE = 1
274
+ A_BITE = 2
275
+ INTEGER16 = 3
276
+ INTEGER32 = 4
277
+ INTEGER64 = 5
278
+ DOUBLE_PRECISION = 6
279
+ SOME_CHARACTERS = 7
280
+ OTHER_I32 = 8
281
+ SOME_ENUM = 9
282
+ MY_MAP = 10
283
+
284
+ FIELDS = {
285
+ IM_TRUE => {:type => ::Thrift::Types::BOOL, :name => 'im_true'},
286
+ A_BITE => {:type => ::Thrift::Types::BYTE, :name => 'a_bite'},
287
+ INTEGER16 => {:type => ::Thrift::Types::I16, :name => 'integer16'},
288
+ INTEGER32 => {:type => ::Thrift::Types::I32, :name => 'integer32'},
289
+ INTEGER64 => {:type => ::Thrift::Types::I64, :name => 'integer64'},
290
+ DOUBLE_PRECISION => {:type => ::Thrift::Types::DOUBLE, :name => 'double_precision'},
291
+ SOME_CHARACTERS => {:type => ::Thrift::Types::STRING, :name => 'some_characters'},
292
+ OTHER_I32 => {:type => ::Thrift::Types::I32, :name => 'other_i32'},
293
+ SOME_ENUM => {:type => ::Thrift::Types::I32, :name => 'some_enum', :enum_class => SpecNamespace::SomeEnum},
294
+ MY_MAP => {:type => ::Thrift::Types::MAP, :name => 'my_map', :key => {:type => ::Thrift::Types::I32, :enum_class => SpecNamespace::SomeEnum}, :value => {:type => ::Thrift::Types::LIST, :element => {:type => ::Thrift::Types::I32, :enum_class => SpecNamespace::SomeEnum}}}
295
+ }
296
+
297
+ def struct_fields; FIELDS; end
298
+
299
+ def validate
300
+ raise(StandardError, 'Union fields are not set.') if get_set_field.nil? || get_value.nil?
301
+ if get_set_field == :some_enum
302
+ raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Invalid value of field some_enum!') unless SpecNamespace::SomeEnum::VALID_VALUES.include?(get_value)
303
+ end
304
+ end
305
+
306
+ ::Thrift::Union.generate_accessors self
307
+ end
308
+
309
+ class Struct_with_union
310
+ include ::Thrift::Struct, ::Thrift::Struct_Union
311
+ FUN_UNION = 1
312
+ INTEGER32 = 2
313
+ SOME_CHARACTERS = 3
314
+
315
+ FIELDS = {
316
+ FUN_UNION => {:type => ::Thrift::Types::STRUCT, :name => 'fun_union', :class => SpecNamespace::My_union},
317
+ INTEGER32 => {:type => ::Thrift::Types::I32, :name => 'integer32'},
318
+ SOME_CHARACTERS => {:type => ::Thrift::Types::STRING, :name => 'some_characters'}
319
+ }
320
+
321
+ def struct_fields; FIELDS; end
322
+
323
+ def validate
324
+ end
325
+
326
+ ::Thrift::Struct.generate_accessors self
327
+ end
328
+
329
+ class StructWithEnumMap
330
+ include ::Thrift::Struct, ::Thrift::Struct_Union
331
+ MY_MAP = 1
332
+
333
+ FIELDS = {
334
+ MY_MAP => {:type => ::Thrift::Types::MAP, :name => 'my_map', :key => {:type => ::Thrift::Types::I32, :enum_class => SpecNamespace::SomeEnum}, :value => {:type => ::Thrift::Types::LIST, :element => {:type => ::Thrift::Types::I32, :enum_class => SpecNamespace::SomeEnum}}}
335
+ }
336
+
337
+ def struct_fields; FIELDS; end
338
+
339
+ def validate
340
+ end
341
+
342
+ ::Thrift::Struct.generate_accessors self
343
+ end
344
+
345
+ end