stark 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +23 -0
- data/.gemtest +0 -0
- data/History.txt +6 -0
- data/Manifest.txt +31 -0
- data/README.txt +63 -0
- data/Rakefile +21 -0
- data/bin/stark +17 -0
- data/lib/stark/ast.rb +47 -0
- data/lib/stark/client.rb +63 -0
- data/lib/stark/converters.rb +29 -0
- data/lib/stark/field.rb +21 -0
- data/lib/stark/log_transport.rb +20 -0
- data/lib/stark/parser.rb +4 -0
- data/lib/stark/processor.rb +50 -0
- data/lib/stark/raw_parser.rb +4019 -0
- data/lib/stark/ruby.rb +468 -0
- data/lib/stark/struct.rb +26 -0
- data/lib/stark/thrift.kpeg +330 -0
- data/lib/stark.rb +37 -0
- data/stark.gemspec +40 -0
- data/test/ThriftSpec.thrift +183 -0
- data/test/gen-rb/profile_constants.rb +8 -0
- data/test/gen-rb/profile_types.rb +36 -0
- data/test/gen-rb/user_storage.rb +451 -0
- data/test/leg.rb +77 -0
- data/test/legacy_profile/profile_constants.rb +8 -0
- data/test/legacy_profile/profile_types.rb +36 -0
- data/test/legacy_profile/user_storage.rb +451 -0
- data/test/profile.thrift +24 -0
- data/test/test_client.rb +184 -0
- data/test/test_parser.rb +278 -0
- data/test/test_server.rb +175 -0
- metadata +134 -0
@@ -0,0 +1,330 @@
|
|
1
|
+
%% name = Stark::Parser
|
2
|
+
|
3
|
+
%% namespace = ast Namespace(lang, namespace)
|
4
|
+
%% include = ast Include(path)
|
5
|
+
%% struct = ast Struct(type, name, fields)
|
6
|
+
%% field = ast Field(index, type, name, value, options)
|
7
|
+
%% function = ast Function(name, return_type, arguments)
|
8
|
+
%% service = ast Service(name, functions)
|
9
|
+
%% comment = ast Comment(text)
|
10
|
+
%% enum = ast Enum(name, values)
|
11
|
+
%% map = ast Map(key,value)
|
12
|
+
%% set = ast Set(value)
|
13
|
+
%% list = ast List(value)
|
14
|
+
%% exception = ast Exception(name, fields)
|
15
|
+
%% const_int = ast ConstInt(value)
|
16
|
+
%% const_str = ast ConstString(value)
|
17
|
+
%% const_id = ast ConstIdentifier(value)
|
18
|
+
%% const_list = ast ConstList(values)
|
19
|
+
%% const_map = ast ConstMap(values)
|
20
|
+
%% const_dbl = ast ConstDouble(value)
|
21
|
+
|
22
|
+
intconstant = /([+-]?[0-9]+)/
|
23
|
+
hexconstant = /("0x"[0-9A-Fa-f]+)/
|
24
|
+
dubconstant = /([+-]?[0-9]+(\.[0-9]+)([eE][+-]?[0-9]+)?)/
|
25
|
+
| /([+-]?[0-9]+([eE][+-]?[0-9]+))/
|
26
|
+
| /([+-]?(\.[0-9]+)([eE][+-]?[0-9]+)?)/
|
27
|
+
# | /([+-]?[0-9]*(\.[0-9]+)?([eE][+-]?[0-9]+)?)/
|
28
|
+
identifier = /([a-zA-Z_][\.a-zA-Z_0-9]*)/
|
29
|
+
whitespace = /([ \t\r\n]*)/
|
30
|
+
# sillycomm = /("\/*""*"*"*\/")/
|
31
|
+
# multicomm = /("\/*"[^*]"\/"*([^*\/]|[^*]"\/"|"*"[^\/])*"*"*"*\/")/
|
32
|
+
# doctext = "\/**" (/[^\*\/]|[^\*]/ "\/"|"*" /[^\/]/)* "*"* "*\/"
|
33
|
+
# comment = /("//"[^\n]*)/
|
34
|
+
# unixcomment = /("#"[^\n]*)/
|
35
|
+
st_identifier = /([a-zA-Z-][\.a-zA-Z_0-9-]*)/
|
36
|
+
literal_begin = /(['\"])/
|
37
|
+
|
38
|
+
reserved =
|
39
|
+
"BEGIN" |
|
40
|
+
"END" |
|
41
|
+
"__CLASS__" |
|
42
|
+
"__DIR__" |
|
43
|
+
"__FILE__" |
|
44
|
+
"__FUNCTION__" |
|
45
|
+
"__LINE__" |
|
46
|
+
"__METHOD__" |
|
47
|
+
"__NAMESPACE__" |
|
48
|
+
"abstract" |
|
49
|
+
"alias" |
|
50
|
+
"and" |
|
51
|
+
"args" |
|
52
|
+
"as" |
|
53
|
+
"assert" |
|
54
|
+
"begin" |
|
55
|
+
"break" |
|
56
|
+
"case" |
|
57
|
+
"catch" |
|
58
|
+
"class" |
|
59
|
+
"clone" |
|
60
|
+
"continue" |
|
61
|
+
"declare" |
|
62
|
+
"def" |
|
63
|
+
"default" |
|
64
|
+
"del" |
|
65
|
+
"delete" |
|
66
|
+
"do" |
|
67
|
+
"dynamic" |
|
68
|
+
"elif" |
|
69
|
+
"else" |
|
70
|
+
"elseif" |
|
71
|
+
"elsif" |
|
72
|
+
"end" |
|
73
|
+
"enddeclare" |
|
74
|
+
"endfor" |
|
75
|
+
"endforeach" |
|
76
|
+
"endif" |
|
77
|
+
"endswitch" |
|
78
|
+
"endwhile" |
|
79
|
+
"ensure" |
|
80
|
+
"except" |
|
81
|
+
"exec" |
|
82
|
+
"finally" |
|
83
|
+
"float" |
|
84
|
+
"for" |
|
85
|
+
"foreach" |
|
86
|
+
"function" |
|
87
|
+
"global" |
|
88
|
+
"goto" |
|
89
|
+
"if" |
|
90
|
+
"implements" |
|
91
|
+
"import" |
|
92
|
+
"in" |
|
93
|
+
"inline" |
|
94
|
+
"instanceof" |
|
95
|
+
"interface" |
|
96
|
+
"is" |
|
97
|
+
"lambda" |
|
98
|
+
"module" |
|
99
|
+
"native" |
|
100
|
+
"new" |
|
101
|
+
"next" |
|
102
|
+
"nil" |
|
103
|
+
"not" |
|
104
|
+
"or" |
|
105
|
+
"pass" |
|
106
|
+
"public" |
|
107
|
+
"print" |
|
108
|
+
"private" |
|
109
|
+
"protected" |
|
110
|
+
"public" |
|
111
|
+
"raise" |
|
112
|
+
"redo" |
|
113
|
+
"rescue" |
|
114
|
+
"retry" |
|
115
|
+
"register" |
|
116
|
+
"return" |
|
117
|
+
"self" |
|
118
|
+
"sizeof" |
|
119
|
+
"static" |
|
120
|
+
"super" |
|
121
|
+
"switch" |
|
122
|
+
"synchronized" |
|
123
|
+
"then" |
|
124
|
+
"this" |
|
125
|
+
"throw" |
|
126
|
+
"transient" |
|
127
|
+
"try" |
|
128
|
+
"undef" |
|
129
|
+
"union" |
|
130
|
+
"unless" |
|
131
|
+
"unsigned" |
|
132
|
+
"until" |
|
133
|
+
"use" |
|
134
|
+
"var" |
|
135
|
+
"virtual" |
|
136
|
+
"volatile" |
|
137
|
+
"when" |
|
138
|
+
"while" |
|
139
|
+
"with" |
|
140
|
+
"xor" |
|
141
|
+
"yield"
|
142
|
+
|
143
|
+
|
144
|
+
tok_int_constant = < intconstant > { text.to_i }
|
145
|
+
| < hexconstant > { text.to_i }
|
146
|
+
| "false" { 0 }
|
147
|
+
| "true" { 1 }
|
148
|
+
|
149
|
+
tok_dub_constant = dubconstant:f { f.to_f }
|
150
|
+
|
151
|
+
tok_identifier = < identifier > ~text
|
152
|
+
tok_st_identifier = st_identifier
|
153
|
+
|
154
|
+
escapes = "\\r" { "\r" }
|
155
|
+
| "\\n" { "\n" }
|
156
|
+
| "\\t" { "\t" }
|
157
|
+
| "\\\"" { "\"" }
|
158
|
+
| "\\'" { "'" }
|
159
|
+
| "\\\\" { "\\" }
|
160
|
+
|
161
|
+
tok_literal = "\"" < (escapes | !"\"" . )* > "\"" ~text
|
162
|
+
| "'" < (escapes | !"'" . )* > "'" ~text
|
163
|
+
|
164
|
+
- = /[ \t]+/
|
165
|
+
osp = /[ \t]*/
|
166
|
+
bsp = /[\s]+/
|
167
|
+
obsp = /[\s]*/
|
168
|
+
|
169
|
+
root = Program !.
|
170
|
+
|
171
|
+
# Program = HeaderList - DefinitionList
|
172
|
+
|
173
|
+
Program = Element*:a { a }
|
174
|
+
|
175
|
+
CComment = "/*" < (!"*/" .)* > "*/" obsp ~comment(text)
|
176
|
+
|
177
|
+
HComment = "#" < (!"\n" .)* > bsp ~comment(text)
|
178
|
+
|
179
|
+
Comment = CComment | HComment
|
180
|
+
|
181
|
+
CaptureDocText = {}
|
182
|
+
DestroyDocText = {}
|
183
|
+
HeaderList = HeaderList Header
|
184
|
+
| Header
|
185
|
+
|
186
|
+
Element = Comment
|
187
|
+
| Header bsp
|
188
|
+
| Definition bsp
|
189
|
+
|
190
|
+
Header = Include | Namespace
|
191
|
+
|
192
|
+
Namespace = "namespace" - tok_identifier:l - tok_identifier:n ~namespace(l,n)
|
193
|
+
| "namespace" - "*" - tok_identifier:n ~namespace(nil,n)
|
194
|
+
|
195
|
+
Include = "include" - tok_literal:f ~include(f)
|
196
|
+
|
197
|
+
DefinitionList = DefinitionList CaptureDocText Definition
|
198
|
+
|
199
|
+
Definition = Const
|
200
|
+
| TypeDefinition
|
201
|
+
| Service
|
202
|
+
|
203
|
+
TypeDefinition = Typedef
|
204
|
+
| Enum
|
205
|
+
| Senum
|
206
|
+
| Struct
|
207
|
+
| Xception
|
208
|
+
|
209
|
+
Typedef = "typedef" - FieldType tok_identifier
|
210
|
+
|
211
|
+
CommaOrSemicolonOptional = ("," | ";")? obsp
|
212
|
+
|
213
|
+
Enum = "enum" - tok_identifier:name osp "{" obsp EnumDefList:vals obsp "}" ~enum(name, vals)
|
214
|
+
|
215
|
+
EnumDefList = EnumDefList:l EnumDef:e { l + [e] }
|
216
|
+
| EnumDef:e { [e] }
|
217
|
+
|
218
|
+
EnumDef = CaptureDocText tok_identifier "=" tok_int_constant CommaOrSemicolonOptional
|
219
|
+
| CaptureDocText tok_identifier CommaOrSemicolonOptional
|
220
|
+
|
221
|
+
Senum = "senum" - tok_identifier "{" SenumDefList "}"
|
222
|
+
|
223
|
+
SenumDefList = SenumDefList SenumDef
|
224
|
+
| nothing
|
225
|
+
|
226
|
+
SenumDef = tok_literal CommaOrSemicolonOptional
|
227
|
+
|
228
|
+
Const = "const" - FieldType tok_identifier "=" ConstValue CommaOrSemicolonOptional
|
229
|
+
|
230
|
+
ConstValue = tok_int_constant:i ~const_int(i)
|
231
|
+
| tok_literal:s ~const_str(s)
|
232
|
+
| tok_identifier:i ~const_id(i)
|
233
|
+
| ConstList
|
234
|
+
| ConstMap
|
235
|
+
| tok_dub_constant:d ~const_dbl(d)
|
236
|
+
|
237
|
+
ConstList = "[" osp ConstListContents*:l osp "]" ~const_list(l)
|
238
|
+
|
239
|
+
ConstListContents = ConstValue:i CommaOrSemicolonOptional osp ~i
|
240
|
+
|
241
|
+
ConstMap = "{" osp ConstMapContents*:m osp "}" ~const_map(m)
|
242
|
+
|
243
|
+
# ConstMapContents = ConstMapContents ConstValue osp ":" osp ConstValue CommaOrSemicolonOptional
|
244
|
+
# | ConstValue osp ":" osp ConstValue CommaOrSemicolonOptional
|
245
|
+
ConstMapContents = ConstValue:k osp ":" osp ConstValue:v CommaOrSemicolonOptional
|
246
|
+
{ [k,v] }
|
247
|
+
|
248
|
+
StructHead = < "struct" | "union"> ~text
|
249
|
+
|
250
|
+
Struct = StructHead:t - tok_identifier:name - XsdAll? osp
|
251
|
+
"{" obsp Comment? FieldList?:list obsp "}" # TypeAnnotations
|
252
|
+
~struct(t.to_sym,name,list)
|
253
|
+
|
254
|
+
XsdAll = "xsd_all"
|
255
|
+
|
256
|
+
XsdOptional = "xsd_optional" - | nothing
|
257
|
+
|
258
|
+
XsdNillable = "xsd_nillable" - | nothing
|
259
|
+
|
260
|
+
XsdAttributes = "xsd_attrs" - "{" FieldList "}"
|
261
|
+
| nothing
|
262
|
+
|
263
|
+
Xception = "exception" - tok_identifier:name osp "{" obsp FieldList?:list obsp "}" ~exception(name, list)
|
264
|
+
|
265
|
+
Service = "service" - tok_identifier:name - Extends? osp
|
266
|
+
"{" obsp FunctionList?:funcs obsp "}"
|
267
|
+
~service(name, funcs)
|
268
|
+
|
269
|
+
Extends = "extends" - tok_identifier
|
270
|
+
|
271
|
+
FunctionList = FunctionList:l Function:f { l + [f] }
|
272
|
+
| Function:f { [f] }
|
273
|
+
|
274
|
+
Function = CaptureDocText OneWay? FunctionType:rt - tok_identifier:name
|
275
|
+
osp "(" FieldList?:args ")" Throws? CommaOrSemicolonOptional
|
276
|
+
~function(name, rt, args)
|
277
|
+
|
278
|
+
OneWay = ("oneway" | "async") -
|
279
|
+
|
280
|
+
Throws = "throws" - "(" FieldList ")"
|
281
|
+
|
282
|
+
FieldList = FieldList:l Field:f { l + [f] }
|
283
|
+
| Field:f { [f] }
|
284
|
+
|
285
|
+
Field = CaptureDocText FieldIdentifier?:i osp FieldRequiredness?:req osp
|
286
|
+
FieldType:t osp tok_identifier:n osp FieldValue?:val
|
287
|
+
CommaOrSemicolonOptional
|
288
|
+
~field(i,t,n,val,req)
|
289
|
+
|
290
|
+
# XsdOptional XsdNillable XsdAttributes TypeAnnotations
|
291
|
+
FieldIdentifier = tok_int_constant:n ":" ~n
|
292
|
+
|
293
|
+
FieldRequiredness = < ("required" | "optional") > { [text] }
|
294
|
+
|
295
|
+
FieldValue = "=" osp ConstValue:e ~e
|
296
|
+
|
297
|
+
FunctionType = FieldType | "void"
|
298
|
+
|
299
|
+
FieldType = ContainerType
|
300
|
+
| tok_identifier:n ~n
|
301
|
+
|
302
|
+
BaseType = SimpleBaseType:t TypeAnnotations ~t
|
303
|
+
|
304
|
+
SimpleBaseType = "string" { :string }
|
305
|
+
| "binary" { :binary }
|
306
|
+
| "slist" { :slist }
|
307
|
+
| "bool" { :bool }
|
308
|
+
| "byte" { :byte }
|
309
|
+
| "i16" { :i16 }
|
310
|
+
| "i32" { :i32 }
|
311
|
+
| "i64" { :i64 }
|
312
|
+
| "double" { :double }
|
313
|
+
|
314
|
+
ContainerType = SimpleContainerType
|
315
|
+
|
316
|
+
SimpleContainerType = MapType | SetType | ListType
|
317
|
+
|
318
|
+
MapType = "map" "<" FieldType:a osp "," osp FieldType:b ">" ~map(a,b)
|
319
|
+
|
320
|
+
SetType = "set" "<" FieldType:a ">" ~set(a)
|
321
|
+
|
322
|
+
ListType = "list" "<" FieldType:a ">" ~list(a)
|
323
|
+
|
324
|
+
CppType = tok_cpp_type tok_literal
|
325
|
+
| nothing
|
326
|
+
|
327
|
+
TypeAnnotationList = TypeAnnotationList TypeAnnotation
|
328
|
+
|
329
|
+
TypeAnnotation = tok_identifier "=" tok_literal CommaOrSemicolonOptional
|
330
|
+
|
data/lib/stark.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'thrift'
|
2
|
+
|
3
|
+
module Stark
|
4
|
+
VERSION = '0.5.0'
|
5
|
+
|
6
|
+
def self.pipe_transport
|
7
|
+
cr, cw = IO.pipe
|
8
|
+
sr, sw = IO.pipe
|
9
|
+
|
10
|
+
client_t = Thrift::IOStreamTransport.new sr, cw
|
11
|
+
server_t = Thrift::IOStreamTransport.new cr, sw
|
12
|
+
|
13
|
+
[client_t, server_t]
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.materialize(file, namespace=Object)
|
17
|
+
require 'stark/parser'
|
18
|
+
require 'stark/ruby'
|
19
|
+
require 'stringio'
|
20
|
+
|
21
|
+
data = File.read file
|
22
|
+
|
23
|
+
tg = Stark::Parser.new data
|
24
|
+
|
25
|
+
unless tg.parse
|
26
|
+
tg.raise_error
|
27
|
+
end
|
28
|
+
|
29
|
+
stream = StringIO.new
|
30
|
+
|
31
|
+
ruby = Stark::Ruby.new stream
|
32
|
+
|
33
|
+
tg.result.each { |i| i.accept ruby }
|
34
|
+
|
35
|
+
namespace.module_eval stream.string
|
36
|
+
end
|
37
|
+
end
|
data/stark.gemspec
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "stark"
|
5
|
+
s.version = "0.5.0.20130227233247"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Evan Phoenix"]
|
9
|
+
s.date = "2013-02-28"
|
10
|
+
s.description = "Optimized thrift bindings for ruby"
|
11
|
+
s.email = ["evan@phx.io"]
|
12
|
+
s.executables = ["stark"]
|
13
|
+
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
|
14
|
+
s.files = [".autotest", "History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/stark", "lib/stark.rb", "test/test_stark.rb", "test/test_client.rb", "test/test_parser.rb", "test/test_server.rb", ".gemtest"]
|
15
|
+
s.homepage = "http://github.com/evanphx/stark"
|
16
|
+
s.rdoc_options = ["--main", "README.txt"]
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
s.rubyforge_project = "stark"
|
19
|
+
s.rubygems_version = "1.8.25"
|
20
|
+
s.summary = "Optimized thrift bindings for ruby"
|
21
|
+
s.test_files = ["test/test_client.rb", "test/test_parser.rb", "test/test_server.rb"]
|
22
|
+
|
23
|
+
if s.respond_to? :specification_version then
|
24
|
+
s.specification_version = 3
|
25
|
+
|
26
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
|
+
s.add_runtime_dependency(%q<thrift>, ["~> 0.9.0"])
|
28
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.10"])
|
29
|
+
s.add_development_dependency(%q<hoe>, ["~> 3.5"])
|
30
|
+
else
|
31
|
+
s.add_dependency(%q<thrift>, ["~> 0.9.0"])
|
32
|
+
s.add_dependency(%q<rdoc>, ["~> 3.10"])
|
33
|
+
s.add_dependency(%q<hoe>, ["~> 3.5"])
|
34
|
+
end
|
35
|
+
else
|
36
|
+
s.add_dependency(%q<thrift>, ["~> 0.9.0"])
|
37
|
+
s.add_dependency(%q<rdoc>, ["~> 3.10"])
|
38
|
+
s.add_dependency(%q<hoe>, ["~> 3.5"])
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,183 @@
|
|
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
|
+
#
|
21
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
22
|
+
# or more contributor license agreements. See the NOTICE file
|
23
|
+
# distributed with this work for additional information
|
24
|
+
# regarding copyright ownership. The ASF licenses this file
|
25
|
+
# to you under the Apache License, Version 2.0 (the
|
26
|
+
# "License"); you may not use this file except in compliance
|
27
|
+
# with the License. You may obtain a copy of the License at
|
28
|
+
#
|
29
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
30
|
+
#
|
31
|
+
# Unless required by applicable law or agreed to in writing,
|
32
|
+
# software distributed under the License is distributed on an
|
33
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
34
|
+
# KIND, either express or implied. See the License for the
|
35
|
+
# specific language governing permissions and limitations
|
36
|
+
# under the License.
|
37
|
+
#
|
38
|
+
|
39
|
+
namespace rb SpecNamespace
|
40
|
+
|
41
|
+
struct Hello {
|
42
|
+
1: string greeting = "hello world"
|
43
|
+
}
|
44
|
+
|
45
|
+
enum SomeEnum {
|
46
|
+
ONE
|
47
|
+
TWO
|
48
|
+
}
|
49
|
+
|
50
|
+
struct StructWithSomeEnum {
|
51
|
+
1: SomeEnum some_enum;
|
52
|
+
}
|
53
|
+
|
54
|
+
union TestUnion {
|
55
|
+
/**
|
56
|
+
* A doc string
|
57
|
+
*/
|
58
|
+
1: string string_field;
|
59
|
+
2: i32 i32_field;
|
60
|
+
3: i32 other_i32_field;
|
61
|
+
4: SomeEnum enum_field;
|
62
|
+
5: binary binary_field;
|
63
|
+
}
|
64
|
+
|
65
|
+
struct Foo {
|
66
|
+
1: i32 simple = 53,
|
67
|
+
2: string words = "words",
|
68
|
+
3: Hello hello = {'greeting' : "hello, world!"},
|
69
|
+
4: list<i32> ints = [1, 2, 2, 3],
|
70
|
+
5: map<i32, map<string, double>> complex,
|
71
|
+
6: set<i16> shorts = [5, 17, 239],
|
72
|
+
7: optional string opt_string
|
73
|
+
8: bool my_bool
|
74
|
+
}
|
75
|
+
|
76
|
+
struct Foo2 {
|
77
|
+
1: binary my_binary
|
78
|
+
}
|
79
|
+
|
80
|
+
struct BoolStruct {
|
81
|
+
1: bool yesno = 1
|
82
|
+
}
|
83
|
+
|
84
|
+
struct SimpleList {
|
85
|
+
1: list<bool> bools,
|
86
|
+
2: list<byte> bytes,
|
87
|
+
3: list<i16> i16s,
|
88
|
+
4: list<i32> i32s,
|
89
|
+
5: list<i64> i64s,
|
90
|
+
6: list<double> doubles,
|
91
|
+
7: list<string> strings,
|
92
|
+
8: list<map<i16, i16>> maps,
|
93
|
+
9: list<list<i16>> lists,
|
94
|
+
10: list<set<i16>> sets,
|
95
|
+
11: list<Hello> hellos
|
96
|
+
}
|
97
|
+
|
98
|
+
exception Xception {
|
99
|
+
1: string message,
|
100
|
+
2: i32 code = 1
|
101
|
+
}
|
102
|
+
|
103
|
+
service NonblockingService {
|
104
|
+
Hello greeting(1:bool english)
|
105
|
+
bool block()
|
106
|
+
oneway void unblock(1:i32 n)
|
107
|
+
oneway void shutdown()
|
108
|
+
void sleep(1:double seconds)
|
109
|
+
}
|
110
|
+
|
111
|
+
union My_union {
|
112
|
+
1: bool im_true,
|
113
|
+
2: byte a_bite,
|
114
|
+
3: i16 integer16,
|
115
|
+
4: i32 integer32,
|
116
|
+
5: i64 integer64,
|
117
|
+
6: double double_precision,
|
118
|
+
7: string some_characters,
|
119
|
+
8: i32 other_i32
|
120
|
+
9: SomeEnum some_enum;
|
121
|
+
10: map<SomeEnum, list<SomeEnum>> my_map;
|
122
|
+
}
|
123
|
+
|
124
|
+
struct Struct_with_union {
|
125
|
+
1: My_union fun_union
|
126
|
+
2: i32 integer32
|
127
|
+
3: string some_characters
|
128
|
+
}
|
129
|
+
|
130
|
+
struct StructWithEnumMap {
|
131
|
+
1: map<SomeEnum, list<SomeEnum>> my_map;
|
132
|
+
}
|
133
|
+
|
134
|
+
# Nested lists
|
135
|
+
struct NestedListInList {
|
136
|
+
1: list<list<byte>> value
|
137
|
+
}
|
138
|
+
|
139
|
+
struct NestedListInSet {
|
140
|
+
1: set<list<byte>> value
|
141
|
+
}
|
142
|
+
|
143
|
+
struct NestedListInMapKey {
|
144
|
+
1: map<list<byte>, byte> value
|
145
|
+
}
|
146
|
+
|
147
|
+
struct NestedListInMapValue {
|
148
|
+
1: map<byte, list<byte>> value
|
149
|
+
}
|
150
|
+
|
151
|
+
# Nested sets
|
152
|
+
struct NestedSetInList {
|
153
|
+
1: list<set<byte>> value
|
154
|
+
}
|
155
|
+
|
156
|
+
struct NestedSetInSet {
|
157
|
+
1: set<set<byte>> value
|
158
|
+
}
|
159
|
+
|
160
|
+
struct NestedSetInMapKey {
|
161
|
+
1: map<set<byte>, byte> value
|
162
|
+
}
|
163
|
+
|
164
|
+
struct NestedSetInMapValue {
|
165
|
+
1: map<byte, set<byte>> value
|
166
|
+
}
|
167
|
+
|
168
|
+
# Nested maps
|
169
|
+
struct NestedMapInList {
|
170
|
+
1: list<map<byte, byte>> value
|
171
|
+
}
|
172
|
+
|
173
|
+
struct NestedMapInSet {
|
174
|
+
1: set<map<byte, byte>> value
|
175
|
+
}
|
176
|
+
|
177
|
+
struct NestedMapInMapKey {
|
178
|
+
2: map<map<byte, byte>, byte> value
|
179
|
+
}
|
180
|
+
|
181
|
+
struct NestedMapInMapValue {
|
182
|
+
2: map<byte, map<byte, byte>> value
|
183
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#
|
2
|
+
# Autogenerated by Thrift Compiler (0.8.0)
|
3
|
+
#
|
4
|
+
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
5
|
+
#
|
6
|
+
|
7
|
+
|
8
|
+
module Status
|
9
|
+
ON = 0
|
10
|
+
OFF = 1
|
11
|
+
DEAD = 2
|
12
|
+
ALIVE = 3
|
13
|
+
VALUE_MAP = {0 => "ON", 1 => "OFF", 2 => "DEAD", 3 => "ALIVE"}
|
14
|
+
VALID_VALUES = Set.new([ON, OFF, DEAD, ALIVE]).freeze
|
15
|
+
end
|
16
|
+
|
17
|
+
class UserProfile
|
18
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
19
|
+
UID = 1
|
20
|
+
NAME = 2
|
21
|
+
BLURB = 3
|
22
|
+
|
23
|
+
FIELDS = {
|
24
|
+
UID => {:type => ::Thrift::Types::I32, :name => 'uid'},
|
25
|
+
NAME => {:type => ::Thrift::Types::STRING, :name => 'name'},
|
26
|
+
BLURB => {:type => ::Thrift::Types::STRING, :name => 'blurb'}
|
27
|
+
}
|
28
|
+
|
29
|
+
def struct_fields; FIELDS; end
|
30
|
+
|
31
|
+
def validate
|
32
|
+
end
|
33
|
+
|
34
|
+
::Thrift::Struct.generate_accessors self
|
35
|
+
end
|
36
|
+
|