fl-thrift 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. data/CHANGELOG +4 -0
  2. data/Manifest +81 -0
  3. data/README +43 -0
  4. data/Rakefile +102 -0
  5. data/benchmark/Benchmark.thrift +24 -0
  6. data/benchmark/benchmark.rb +271 -0
  7. data/benchmark/client.rb +74 -0
  8. data/benchmark/server.rb +82 -0
  9. data/benchmark/thin_server.rb +44 -0
  10. data/ext/binary_protocol_accelerated.c +474 -0
  11. data/ext/binary_protocol_accelerated.h +20 -0
  12. data/ext/compact_protocol.c +665 -0
  13. data/ext/compact_protocol.h +20 -0
  14. data/ext/constants.h +95 -0
  15. data/ext/extconf.rb +26 -0
  16. data/ext/macros.h +41 -0
  17. data/ext/memory_buffer.c +76 -0
  18. data/ext/memory_buffer.h +20 -0
  19. data/ext/protocol.c +185 -0
  20. data/ext/protocol.h +20 -0
  21. data/ext/struct.c +606 -0
  22. data/ext/struct.h +67 -0
  23. data/ext/thrift_native.c +194 -0
  24. data/lib/thrift.rb +59 -0
  25. data/lib/thrift/client.rb +62 -0
  26. data/lib/thrift/core_ext.rb +23 -0
  27. data/lib/thrift/core_ext/fixnum.rb +29 -0
  28. data/lib/thrift/exceptions.rb +82 -0
  29. data/lib/thrift/processor.rb +57 -0
  30. data/lib/thrift/protocol/base_protocol.rb +290 -0
  31. data/lib/thrift/protocol/binary_protocol.rb +225 -0
  32. data/lib/thrift/protocol/binary_protocol_accelerated.rb +35 -0
  33. data/lib/thrift/protocol/compact_protocol.rb +422 -0
  34. data/lib/thrift/serializer/deserializer.rb +33 -0
  35. data/lib/thrift/serializer/serializer.rb +34 -0
  36. data/lib/thrift/server/base_server.rb +31 -0
  37. data/lib/thrift/server/mongrel_http_server.rb +58 -0
  38. data/lib/thrift/server/nonblocking_server.rb +296 -0
  39. data/lib/thrift/server/simple_server.rb +43 -0
  40. data/lib/thrift/server/thread_pool_server.rb +75 -0
  41. data/lib/thrift/server/threaded_server.rb +47 -0
  42. data/lib/thrift/struct.rb +298 -0
  43. data/lib/thrift/thrift_native.rb +24 -0
  44. data/lib/thrift/transport/base_server_transport.rb +37 -0
  45. data/lib/thrift/transport/base_transport.rb +70 -0
  46. data/lib/thrift/transport/buffered_transport.rb +77 -0
  47. data/lib/thrift/transport/framed_transport.rb +90 -0
  48. data/lib/thrift/transport/http_client_transport.rb +45 -0
  49. data/lib/thrift/transport/io_stream_transport.rb +39 -0
  50. data/lib/thrift/transport/memory_buffer_transport.rb +96 -0
  51. data/lib/thrift/transport/server_socket.rb +63 -0
  52. data/lib/thrift/transport/socket.rb +136 -0
  53. data/lib/thrift/transport/unix_server_socket.rb +60 -0
  54. data/lib/thrift/transport/unix_socket.rb +40 -0
  55. data/lib/thrift/types.rb +101 -0
  56. data/script/proto_benchmark.rb +121 -0
  57. data/script/read_struct.rb +43 -0
  58. data/script/write_struct.rb +30 -0
  59. data/setup.rb +1585 -0
  60. data/spec/ThriftSpec.thrift +84 -0
  61. data/spec/base_protocol_spec.rb +160 -0
  62. data/spec/base_transport_spec.rb +351 -0
  63. data/spec/binary_protocol_accelerated_spec.rb +41 -0
  64. data/spec/binary_protocol_spec.rb +63 -0
  65. data/spec/binary_protocol_spec_shared.rb +375 -0
  66. data/spec/client_spec.rb +100 -0
  67. data/spec/compact_protocol_spec.rb +117 -0
  68. data/spec/exception_spec.rb +142 -0
  69. data/spec/http_client_spec.rb +49 -0
  70. data/spec/mongrel_http_server_spec.rb +117 -0
  71. data/spec/nonblocking_server_spec.rb +265 -0
  72. data/spec/processor_spec.rb +83 -0
  73. data/spec/serializer_spec.rb +69 -0
  74. data/spec/server_socket_spec.rb +80 -0
  75. data/spec/server_spec.rb +160 -0
  76. data/spec/socket_spec.rb +61 -0
  77. data/spec/socket_spec_shared.rb +104 -0
  78. data/spec/spec_helper.rb +60 -0
  79. data/spec/struct_spec.rb +252 -0
  80. data/spec/types_spec.rb +116 -0
  81. data/spec/unix_socket_spec.rb +108 -0
  82. data/thrift.gemspec +32 -0
  83. metadata +202 -0
@@ -0,0 +1,67 @@
1
+ /*
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ #include <stdbool.h>
21
+ #include <ruby.h>
22
+
23
+ typedef struct native_proto_method_table {
24
+ VALUE (*write_bool)(VALUE, VALUE);
25
+ VALUE (*write_byte)(VALUE, VALUE);
26
+ VALUE (*write_i16)(VALUE, VALUE);
27
+ VALUE (*write_i32)(VALUE, VALUE);
28
+ VALUE (*write_i64)(VALUE, VALUE);
29
+ VALUE (*write_double)(VALUE, VALUE);
30
+ VALUE (*write_string)(VALUE, VALUE);
31
+ VALUE (*write_list_begin)(VALUE, VALUE, VALUE);
32
+ VALUE (*write_list_end)(VALUE);
33
+ VALUE (*write_set_begin)(VALUE, VALUE, VALUE);
34
+ VALUE (*write_set_end)(VALUE);
35
+ VALUE (*write_map_begin)(VALUE, VALUE, VALUE, VALUE);
36
+ VALUE (*write_map_end)(VALUE);
37
+ VALUE (*write_struct_begin)(VALUE, VALUE);
38
+ VALUE (*write_struct_end)(VALUE);
39
+ VALUE (*write_field_begin)(VALUE, VALUE, VALUE, VALUE);
40
+ VALUE (*write_field_end)(VALUE);
41
+ VALUE (*write_field_stop)(VALUE);
42
+ VALUE (*write_message_begin)(VALUE, VALUE, VALUE, VALUE);
43
+ VALUE (*write_message_end)(VALUE);
44
+
45
+ VALUE (*read_message_begin)(VALUE);
46
+ VALUE (*read_message_end)(VALUE);
47
+ VALUE (*read_field_begin)(VALUE);
48
+ VALUE (*read_field_end)(VALUE);
49
+ VALUE (*read_map_begin)(VALUE);
50
+ VALUE (*read_map_end)(VALUE);
51
+ VALUE (*read_list_begin)(VALUE);
52
+ VALUE (*read_list_end)(VALUE);
53
+ VALUE (*read_set_begin)(VALUE);
54
+ VALUE (*read_set_end)(VALUE);
55
+ VALUE (*read_byte)(VALUE);
56
+ VALUE (*read_bool)(VALUE);
57
+ VALUE (*read_i16)(VALUE);
58
+ VALUE (*read_i32)(VALUE);
59
+ VALUE (*read_i64)(VALUE);
60
+ VALUE (*read_double)(VALUE);
61
+ VALUE (*read_string)(VALUE);
62
+ VALUE (*read_struct_begin)(VALUE);
63
+ VALUE (*read_struct_end)(VALUE);
64
+
65
+ } native_proto_method_table;
66
+
67
+ void Init_struct();
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Licensed to the Apache Software Foundation (ASF) under one
3
+ * or more contributor license agreements. See the NOTICE file
4
+ * distributed with this work for additional information
5
+ * regarding copyright ownership. The ASF licenses this file
6
+ * to you under the Apache License, Version 2.0 (the
7
+ * "License"); you may not use this file except in compliance
8
+ * with the License. You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing,
13
+ * software distributed under the License is distributed on an
14
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ * KIND, either express or implied. See the License for the
16
+ * specific language governing permissions and limitations
17
+ * under the License.
18
+ */
19
+
20
+ #include <ruby.h>
21
+ #include <struct.h>
22
+ #include <binary_protocol_accelerated.h>
23
+ #include <compact_protocol.h>
24
+ #include <protocol.h>
25
+ #include <memory_buffer.h>
26
+
27
+ // cached classes/modules
28
+ VALUE rb_cSet;
29
+ VALUE thrift_module;
30
+ VALUE thrift_types_module;
31
+
32
+ // TType constants
33
+ int TTYPE_STOP;
34
+ int TTYPE_BOOL;
35
+ int TTYPE_BYTE;
36
+ int TTYPE_I16;
37
+ int TTYPE_I32;
38
+ int TTYPE_I64;
39
+ int TTYPE_DOUBLE;
40
+ int TTYPE_STRING;
41
+ int TTYPE_MAP;
42
+ int TTYPE_SET;
43
+ int TTYPE_LIST;
44
+ int TTYPE_STRUCT;
45
+
46
+ // method ids
47
+ ID validate_method_id;
48
+ ID write_struct_begin_method_id;
49
+ ID write_struct_end_method_id;
50
+ ID write_field_begin_method_id;
51
+ ID write_field_end_method_id;
52
+ ID write_boolean_method_id;
53
+ ID write_byte_method_id;
54
+ ID write_i16_method_id;
55
+ ID write_i32_method_id;
56
+ ID write_i64_method_id;
57
+ ID write_double_method_id;
58
+ ID write_string_method_id;
59
+ ID write_map_begin_method_id;
60
+ ID write_map_end_method_id;
61
+ ID write_list_begin_method_id;
62
+ ID write_list_end_method_id;
63
+ ID write_set_begin_method_id;
64
+ ID write_set_end_method_id;
65
+ ID size_method_id;
66
+ ID read_bool_method_id;
67
+ ID read_byte_method_id;
68
+ ID read_i16_method_id;
69
+ ID read_i32_method_id;
70
+ ID read_i64_method_id;
71
+ ID read_string_method_id;
72
+ ID read_double_method_id;
73
+ ID read_map_begin_method_id;
74
+ ID read_map_end_method_id;
75
+ ID read_list_begin_method_id;
76
+ ID read_list_end_method_id;
77
+ ID read_set_begin_method_id;
78
+ ID read_set_end_method_id;
79
+ ID read_struct_begin_method_id;
80
+ ID read_struct_end_method_id;
81
+ ID read_field_begin_method_id;
82
+ ID read_field_end_method_id;
83
+ ID keys_method_id;
84
+ ID entries_method_id;
85
+ ID name_method_id;
86
+ ID sort_method_id;
87
+ ID write_field_stop_method_id;
88
+ ID skip_method_id;
89
+ ID write_method_id;
90
+ ID read_all_method_id;
91
+ ID native_qmark_method_id;
92
+
93
+ // constant ids
94
+ ID fields_const_id;
95
+ ID transport_ivar_id;
96
+ ID strict_read_ivar_id;
97
+ ID strict_write_ivar_id;
98
+
99
+ // cached symbols
100
+ VALUE type_sym;
101
+ VALUE name_sym;
102
+ VALUE key_sym;
103
+ VALUE value_sym;
104
+ VALUE element_sym;
105
+ VALUE class_sym;
106
+ VALUE protocol_exception_class;
107
+
108
+ void Init_thrift_native() {
109
+ // cached classes
110
+ thrift_module = rb_const_get(rb_cObject, rb_intern("Thrift"));
111
+ thrift_types_module = rb_const_get(thrift_module, rb_intern("Types"));
112
+ rb_cSet = rb_const_get(rb_cObject, rb_intern("Set"));
113
+ protocol_exception_class = rb_const_get(thrift_module, rb_intern("ProtocolException"));
114
+
115
+ // Init ttype constants
116
+ TTYPE_BOOL = FIX2INT(rb_const_get(thrift_types_module, rb_intern("BOOL")));
117
+ TTYPE_BYTE = FIX2INT(rb_const_get(thrift_types_module, rb_intern("BYTE")));
118
+ TTYPE_I16 = FIX2INT(rb_const_get(thrift_types_module, rb_intern("I16")));
119
+ TTYPE_I32 = FIX2INT(rb_const_get(thrift_types_module, rb_intern("I32")));
120
+ TTYPE_I64 = FIX2INT(rb_const_get(thrift_types_module, rb_intern("I64")));
121
+ TTYPE_DOUBLE = FIX2INT(rb_const_get(thrift_types_module, rb_intern("DOUBLE")));
122
+ TTYPE_STRING = FIX2INT(rb_const_get(thrift_types_module, rb_intern("STRING")));
123
+ TTYPE_MAP = FIX2INT(rb_const_get(thrift_types_module, rb_intern("MAP")));
124
+ TTYPE_SET = FIX2INT(rb_const_get(thrift_types_module, rb_intern("SET")));
125
+ TTYPE_LIST = FIX2INT(rb_const_get(thrift_types_module, rb_intern("LIST")));
126
+ TTYPE_STRUCT = FIX2INT(rb_const_get(thrift_types_module, rb_intern("STRUCT")));
127
+
128
+ // method ids
129
+ validate_method_id = rb_intern("validate");
130
+ write_struct_begin_method_id = rb_intern("write_struct_begin");
131
+ write_struct_end_method_id = rb_intern("write_struct_end");
132
+ write_field_begin_method_id = rb_intern("write_field_begin");
133
+ write_field_end_method_id = rb_intern("write_field_end");
134
+ write_boolean_method_id = rb_intern("write_bool");
135
+ write_byte_method_id = rb_intern("write_byte");
136
+ write_i16_method_id = rb_intern("write_i16");
137
+ write_i32_method_id = rb_intern("write_i32");
138
+ write_i64_method_id = rb_intern("write_i64");
139
+ write_double_method_id = rb_intern("write_double");
140
+ write_string_method_id = rb_intern("write_string");
141
+ write_map_begin_method_id = rb_intern("write_map_begin");
142
+ write_map_end_method_id = rb_intern("write_map_end");
143
+ write_list_begin_method_id = rb_intern("write_list_begin");
144
+ write_list_end_method_id = rb_intern("write_list_end");
145
+ write_set_begin_method_id = rb_intern("write_set_begin");
146
+ write_set_end_method_id = rb_intern("write_set_end");
147
+ size_method_id = rb_intern("size");
148
+ read_bool_method_id = rb_intern("read_bool");
149
+ read_byte_method_id = rb_intern("read_byte");
150
+ read_i16_method_id = rb_intern("read_i16");
151
+ read_i32_method_id = rb_intern("read_i32");
152
+ read_i64_method_id = rb_intern("read_i64");
153
+ read_string_method_id = rb_intern("read_string");
154
+ read_double_method_id = rb_intern("read_double");
155
+ read_map_begin_method_id = rb_intern("read_map_begin");
156
+ read_map_end_method_id = rb_intern("read_map_end");
157
+ read_list_begin_method_id = rb_intern("read_list_begin");
158
+ read_list_end_method_id = rb_intern("read_list_end");
159
+ read_set_begin_method_id = rb_intern("read_set_begin");
160
+ read_set_end_method_id = rb_intern("read_set_end");
161
+ read_struct_begin_method_id = rb_intern("read_struct_begin");
162
+ read_struct_end_method_id = rb_intern("read_struct_end");
163
+ read_field_begin_method_id = rb_intern("read_field_begin");
164
+ read_field_end_method_id = rb_intern("read_field_end");
165
+ keys_method_id = rb_intern("keys");
166
+ entries_method_id = rb_intern("entries");
167
+ name_method_id = rb_intern("name");
168
+ sort_method_id = rb_intern("sort");
169
+ write_field_stop_method_id = rb_intern("write_field_stop");
170
+ skip_method_id = rb_intern("skip");
171
+ write_method_id = rb_intern("write");
172
+ read_all_method_id = rb_intern("read_all");
173
+ native_qmark_method_id = rb_intern("native?");
174
+
175
+ // constant ids
176
+ fields_const_id = rb_intern("FIELDS");
177
+ transport_ivar_id = rb_intern("@trans");
178
+ strict_read_ivar_id = rb_intern("@strict_read");
179
+ strict_write_ivar_id = rb_intern("@strict_write");
180
+
181
+ // cached symbols
182
+ type_sym = ID2SYM(rb_intern("type"));
183
+ name_sym = ID2SYM(rb_intern("name"));
184
+ key_sym = ID2SYM(rb_intern("key"));
185
+ value_sym = ID2SYM(rb_intern("value"));
186
+ element_sym = ID2SYM(rb_intern("element"));
187
+ class_sym = ID2SYM(rb_intern("class"));
188
+
189
+ Init_protocol();
190
+ Init_struct();
191
+ Init_binary_protocol_accelerated();
192
+ Init_compact_protocol();
193
+ Init_memory_buffer();
194
+ }
@@ -0,0 +1,59 @@
1
+ #
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+ #
19
+
20
+ $:.unshift File.dirname(__FILE__)
21
+
22
+ require 'thrift/core_ext'
23
+ require 'thrift/exceptions'
24
+ require 'thrift/types'
25
+ require 'thrift/processor'
26
+ require 'thrift/client'
27
+ require 'thrift/struct'
28
+
29
+ # serializer
30
+ require 'thrift/serializer/serializer'
31
+ require 'thrift/serializer/deserializer'
32
+
33
+ # protocol
34
+ require 'thrift/protocol/base_protocol'
35
+ require 'thrift/protocol/binary_protocol'
36
+ require 'thrift/protocol/binary_protocol_accelerated'
37
+ require 'thrift/protocol/compact_protocol'
38
+
39
+ # transport
40
+ require 'thrift/transport/base_transport'
41
+ require 'thrift/transport/base_server_transport'
42
+ require 'thrift/transport/socket'
43
+ require 'thrift/transport/server_socket'
44
+ require 'thrift/transport/unix_socket'
45
+ require 'thrift/transport/unix_server_socket'
46
+ require 'thrift/transport/buffered_transport'
47
+ require 'thrift/transport/framed_transport'
48
+ require 'thrift/transport/http_client_transport'
49
+ require 'thrift/transport/io_stream_transport'
50
+ require 'thrift/transport/memory_buffer_transport'
51
+
52
+ # server
53
+ require 'thrift/server/base_server'
54
+ require 'thrift/server/nonblocking_server'
55
+ require 'thrift/server/simple_server'
56
+ require 'thrift/server/threaded_server'
57
+ require 'thrift/server/thread_pool_server'
58
+
59
+ require 'thrift/thrift_native'
@@ -0,0 +1,62 @@
1
+ #
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+ #
19
+
20
+ module Thrift
21
+ module Client
22
+ def initialize(iprot, oprot=nil)
23
+ @iprot = iprot
24
+ @oprot = oprot || iprot
25
+ @seqid = 0
26
+ end
27
+
28
+ def send_message(name, args_class, args = {})
29
+ @oprot.write_message_begin(name, MessageTypes::CALL, @seqid)
30
+ data = args_class.new
31
+ args.each do |k, v|
32
+ data.send("#{k.to_s}=", v)
33
+ end
34
+ begin
35
+ data.write(@oprot)
36
+ rescue StandardError => e
37
+ @oprot.trans.close
38
+ raise e
39
+ end
40
+ @oprot.write_message_end
41
+ @oprot.trans.flush
42
+ end
43
+
44
+ def receive_message(result_klass)
45
+ fname, mtype, rseqid = @iprot.read_message_begin
46
+ handle_exception(mtype)
47
+ result = result_klass.new
48
+ result.read(@iprot)
49
+ @iprot.read_message_end
50
+ result
51
+ end
52
+
53
+ def handle_exception(mtype)
54
+ if mtype == MessageTypes::EXCEPTION
55
+ x = ApplicationException.new
56
+ x.read(@iprot)
57
+ @iprot.read_message_end
58
+ raise x
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,23 @@
1
+ #
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+ #
19
+
20
+ Dir[File.dirname(__FILE__) + "/core_ext/*.rb"].each do |file|
21
+ name = File.basename(file, '.rb')
22
+ require "thrift/core_ext/#{name}"
23
+ end
@@ -0,0 +1,29 @@
1
+ #
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+ #
19
+
20
+ # Versions of ruby pre 1.8.7 do not have an .ord method available in the Fixnum
21
+ # class.
22
+ #
23
+ if RUBY_VERSION < "1.8.7"
24
+ class Fixnum
25
+ def ord
26
+ self
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,82 @@
1
+ #
2
+ # Licensed to the Apache Software Foundation (ASF) under one
3
+ # or more contributor license agreements. See the NOTICE file
4
+ # distributed with this work for additional information
5
+ # regarding copyright ownership. The ASF licenses this file
6
+ # to you under the Apache License, Version 2.0 (the
7
+ # "License"); you may not use this file except in compliance
8
+ # with the License. You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing,
13
+ # software distributed under the License is distributed on an
14
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
+ # KIND, either express or implied. See the License for the
16
+ # specific language governing permissions and limitations
17
+ # under the License.
18
+ #
19
+
20
+ module Thrift
21
+ class Exception < StandardError
22
+ def initialize(message)
23
+ super
24
+ @message = message
25
+ end
26
+
27
+ attr_reader :message
28
+ end
29
+
30
+ class ApplicationException < Exception
31
+
32
+ UNKNOWN = 0
33
+ UNKNOWN_METHOD = 1
34
+ INVALID_MESSAGE_TYPE = 2
35
+ WRONG_METHOD_NAME = 3
36
+ BAD_SEQUENCE_ID = 4
37
+ MISSING_RESULT = 5
38
+
39
+ attr_reader :type
40
+
41
+ def initialize(type=UNKNOWN, message=nil)
42
+ super(message)
43
+ @type = type
44
+ end
45
+
46
+ def read(iprot)
47
+ iprot.read_struct_begin
48
+ while true
49
+ fname, ftype, fid = iprot.read_field_begin
50
+ if ftype == Types::STOP
51
+ break
52
+ end
53
+ if fid == 1 and ftype == Types::STRING
54
+ @message = iprot.read_string
55
+ elsif fid == 2 and ftype == Types::I32
56
+ @type = iprot.read_i32
57
+ else
58
+ iprot.skip(ftype)
59
+ end
60
+ iprot.read_field_end
61
+ end
62
+ iprot.read_struct_end
63
+ end
64
+
65
+ def write(oprot)
66
+ oprot.write_struct_begin('Thrift::ApplicationException')
67
+ unless @message.nil?
68
+ oprot.write_field_begin('message', Types::STRING, 1)
69
+ oprot.write_string(@message)
70
+ oprot.write_field_end
71
+ end
72
+ unless @type.nil?
73
+ oprot.write_field_begin('type', Types::I32, 2)
74
+ oprot.write_i32(@type)
75
+ oprot.write_field_end
76
+ end
77
+ oprot.write_field_stop
78
+ oprot.write_struct_end
79
+ end
80
+
81
+ end
82
+ end