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
20namespace c_glib TTest
21namespace cpp thrift.test.debug
22namespace java thrift.test
23namespace rb thrift.test
24
25struct Doubles {
26 1: double nan,
27 2: double inf,
28 3: double neginf,
29 4: double repeating,
30 5: double big,
31 6: double tiny,
32 7: double zero,
33 8: double negzero,
34}
35
36struct OneOfEach {
37  1: bool im_true,
38  2: bool im_false,
39  3: i8 a_bite = 0x7f,
40  4: i16 integer16 = 0x7fff,
41  5: i32 integer32,
42  6: i64 integer64 = 10000000000,
43  7: double double_precision,
44  8: string some_characters,
45  9: string zomg_unicode,
46  10: bool what_who,
47  11: binary base64,
48  12: list<i8> byte_list = [1, 2, 3],
49  13: list<i16> i16_list = [1,2,3],
50  14: list<i64> i64_list = [1,2,3]
51  15: uuid rfc4122_uuid
52}
53
54struct Bonk {
55  1: i32 type,
56  2: string message,
57}
58
59struct Nesting {
60  1: Bonk my_bonk,
61  2: OneOfEach my_ooe,
62}
63
64struct HolyMoley {
65  1: list<OneOfEach> big,
66  2: set<list<string> (python.immutable = "")> contain,
67  3: map<string,list<Bonk>> bonks,
68}
69
70struct Backwards {
71  2: i32 first_tag2,
72  1: i32 second_tag1,
73}
74
75struct Empty {
76} (
77  python.immutable = "",
78)
79
80struct Wrapper {
81  1: Empty foo
82} (
83  python.immutable = "",
84)
85
86struct RandomStuff {
87  1: i32 a,
88  2: i32 b,
89  3: i32 c,
90  4: i32 d,
91  5: list<i32> myintlist,
92  6: map<i32,Wrapper> maps,
93  7: i64 bigint,
94  8: double triple,
95}
96
97struct Base64 {
98  1: i32 a,
99  2: binary b1,
100  3: binary b2,
101  4: binary b3,
102  5: binary b4,
103  6: binary b5,
104  7: binary b6,
105}
106
107struct CompactProtoTestStruct {
108  // primitive fields
109  1: i8     a_byte;
110  2: i16    a_i16;
111  3: i32    a_i32;
112  4: i64    a_i64;
113  5: double a_double;
114  6: string a_string;
115  7: binary a_binary;
116  8: bool   true_field;
117  9: bool   false_field;
118  10: Empty empty_struct_field;
119
120  // primitives in lists
121  11: list<i8>      byte_list;
122  12: list<i16>     i16_list;
123  13: list<i32>     i32_list;
124  14: list<i64>     i64_list;
125  15: list<double>  double_list;
126  16: list<string>  string_list;
127  17: list<binary>  binary_list;
128  18: list<bool>    boolean_list;
129  19: list<Empty>   struct_list;
130
131  // primitives in sets
132  20: set<i8>       byte_set;
133  21: set<i16>      i16_set;
134  22: set<i32>      i32_set;
135  23: set<i64>      i64_set;
136  24: set<double>   double_set;
137  25: set<string>   string_set;
138  26: set<binary>   binary_set;
139  27: set<bool>     boolean_set;
140  28: set<Empty>    struct_set;
141
142  // maps
143  // primitives as keys
144  29: map<i8, i8>               byte_byte_map;
145  30: map<i16, i8>              i16_byte_map;
146  31: map<i32, i8>              i32_byte_map;
147  32: map<i64, i8>              i64_byte_map;
148  33: map<double, i8>           double_byte_map;
149  34: map<string, i8>           string_byte_map;
150  35: map<binary, i8>           binary_byte_map;
151  36: map<bool, i8>             boolean_byte_map;
152  // primitives as values
153  37: map<i8, i16>              byte_i16_map;
154  38: map<i8, i32>              byte_i32_map;
155  39: map<i8, i64>              byte_i64_map;
156  40: map<i8, double>           byte_double_map;
157  41: map<i8, string>           byte_string_map;
158  42: map<i8, binary>           byte_binary_map;
159  43: map<i8, bool>             byte_boolean_map;
160  // collections as keys
161  44: map<list<i8> (python.immutable = ""), i8>       list_byte_map;
162  45: map<set<i8> (python.immutable = ""), i8>        set_byte_map;
163  46: map<map<i8,i8> (python.immutable = ""), i8>     map_byte_map;
164  // collections as values
165  47: map<i8, map<i8,i8>>     byte_map_map;
166  48: map<i8, set<i8>>        byte_set_map;
167  49: map<i8, list<i8>>       byte_list_map;
168
169  // large field IDs
170  500 : i64  field500;
171  5000 : i64  field5000;
172  20000 : i64  field20000;
173}
174
175// To be used to test the serialization of an empty map
176struct SingleMapTestStruct {
177  1: required map<i32, i32>       i32_map;
178}
179
180const CompactProtoTestStruct COMPACT_TEST = {
181  'a_byte'             : 127,
182  'a_i16'              : 32000,
183  'a_i32'              : 1000000000,
184  'a_i64'              : 0xffffffffff,
185  'a_double'           : 5.6789,
186  'a_string'           : "my string",
187//'a_binary,'
188  'true_field'         : 1,
189  'false_field'        : 0,
190  'empty_struct_field' : {},
191  'byte_list'          : [-127, -1, 0, 1, 127],
192  'i16_list'           : [-1, 0, 1, 0x7fff],
193  'i32_list'           : [-1, 0, 0xff, 0xffff, 0xffffff, 0x7fffffff],
194  'i64_list'           : [-1, 0, 0xff, 0xffff, 0xffffff, 0xffffffff, 0xffffffffff, 0xffffffffffff, 0xffffffffffffff, 0x7fffffffffffffff],
195  'double_list'        : [0.1, 0.2, 0.3],
196  'string_list'        : ["first", "second", "third"],
197//'binary_list,'
198  'boolean_list'       : [1, 1, 1, 0, 0, 0],
199  'struct_list'        : [{}, {}],
200  'byte_set'           : [-127, -1, 0, 1, 127],
201  'i16_set'            : [-1, 0, 1, 0x7fff],
202  'i32_set'            : [1, 2, 3],
203  'i64_set'            : [-1, 0, 0xff, 0xffff, 0xffffff, 0xffffffff, 0xffffffffff, 0xffffffffffff, 0xffffffffffffff, 0x7fffffffffffffff],
204  'double_set'         : [0.1, 0.2, 0.3],
205  'string_set'         : ["first", "second", "third"],
206//'binary_set,'
207  'boolean_set'        : [1, 0],
208  'struct_set'         : [{}],
209  'byte_byte_map'      : {1 : 2},
210  'i16_byte_map'       : {1 : 1, -1 : 1, 0x7fff : 1},
211  'i32_byte_map'       : {1 : 1, -1 : 1, 0x7fffffff : 1},
212  'i64_byte_map'       : {0 : 1,  1 : 1, -1 : 1, 0x7fffffffffffffff : 1},
213  'double_byte_map'    : {-1.1 : 1, 1.1 : 1},
214  'string_byte_map'    : {"first" : 1, "second" : 2, "third" : 3, "" : 0},
215//'binary_byte_map,'
216  'boolean_byte_map'   : {1 : 1, 0 : 0},
217  'byte_i16_map'       : {1 : 1, 2 : -1, 3 : 0x7fff},
218  'byte_i32_map'       : {1 : 1, 2 : -1, 3 : 0x7fffffff},
219  'byte_i64_map'       : {1 : 1, 2 : -1, 3 : 0x7fffffffffffffff},
220  'byte_double_map'    : {1 : 0.1, 2 : -0.1, 3 : 1000000.1},
221  'byte_string_map'    : {1 : "", 2 : "blah", 3 : "loooooooooooooong string"},
222//'byte_binary_map,'
223  'byte_boolean_map'   : {1 : 1, 2 : 0},
224  'list_byte_map'      : {[1, 2, 3] : 1, [0, 1] : 2, [] : 0},
225  'set_byte_map'       : {[1, 2, 3] : 1, [0, 1] : 2, [] : 0},
226  'map_byte_map'       : {{1 : 1} : 1, {2 : 2} : 2, {} : 0},
227  'byte_map_map'       : {0 : {}, 1 : {1 : 1}, 2 : {1 : 1, 2 : 2}},
228  'byte_set_map'       : {0 : [], 1 : [1], 2 : [1, 2]},
229  'byte_list_map'      : {0 : [], 1 : [1], 2 : [1, 2]},
230
231  'field500'           : 500,
232  'field5000'          : 5000,
233  'field20000'         : 20000,
234}
235
236
237const i32 MYCONST = 2
238
239
240exception ExceptionWithAMap {
241  1: string blah;
242  2: map<string, string> map_field;
243}
244
245exception MutableException {
246  1: string msg;
247} (python.immutable = "false")
248
249exception ExceptionWithoutFields {}
250
251service ServiceForExceptionWithAMap {
252  void methodThatThrowsAnException() throws (1: ExceptionWithAMap xwamap);
253}
254
255service Srv {
256  i32 Janky(1: i32 arg);
257
258  // return type only methods
259
260  void voidMethod();
261  i32 primitiveMethod();
262  CompactProtoTestStruct structMethod();
263
264  void methodWithDefaultArgs(1: i32 something = MYCONST);
265
266  oneway void onewayMethod();
267
268  bool declaredExceptionMethod(1: bool shouldThrow) throws (1: ExceptionWithAMap xwamap);
269}
270
271service Inherited extends Srv {
272  i32 identity(1: i32 arg)
273}
274
275service EmptyService {}
276
277// The only purpose of this thing is to increase the size of the generated code
278// so that ZlibTest has more highly compressible data to play with.
279struct BlowUp {
280  1: map<list<i32>(python.immutable = ""),set<map<i32,string> (python.immutable = "")>> b1;
281  2: map<list<i32>(python.immutable = ""),set<map<i32,string> (python.immutable = "")>> b2;
282  3: map<list<i32>(python.immutable = ""),set<map<i32,string> (python.immutable = "")>> b3;
283  4: map<list<i32>(python.immutable = ""),set<map<i32,string> (python.immutable = "")>> b4;
284}
285
286
287struct ReverseOrderStruct {
288  4: string first;
289  3: i16 second;
290  2: i32 third;
291  1: i64 fourth;
292}
293
294service ReverseOrderService {
295  void myMethod(4: string first, 3: i16 second, 2: i32 third, 1: i64 fourth);
296}
297
298enum SomeEnum {
299  ONE = 1
300  TWO = 2
301}
302
303/** This is a docstring on a constant! */
304const SomeEnum MY_SOME_ENUM = SomeEnum.ONE
305
306const SomeEnum MY_SOME_ENUM_1 = 1
307/*const SomeEnum MY_SOME_ENUM_2 = 7*/
308
309const map<SomeEnum,SomeEnum> MY_ENUM_MAP = {
310  SomeEnum.ONE : SomeEnum.TWO
311}
312
313struct StructWithSomeEnum {
314  1: SomeEnum blah;
315}
316
317const map<SomeEnum,StructWithSomeEnum> EXTRA_CRAZY_MAP = {
318  SomeEnum.ONE : {"blah" : SomeEnum.TWO}
319}
320
321union TestUnion {
322  /**
323   * A doc string
324   */
325  1: string string_field;
326  2: i32 i32_field;
327  3: OneOfEach struct_field;
328  4: list<RandomStuff> struct_list;
329  5: i32 other_i32_field;
330  6: SomeEnum enum_field;
331  7: set<i32> i32_set;
332  8: map<i32, i32> i32_map;
333}
334
335union TestUnionMinusStringField {
336  2: i32 i32_field;
337  3: OneOfEach struct_field;
338  4: list<RandomStuff> struct_list;
339  5: i32 other_i32_field;
340  6: SomeEnum enum_field;
341  7: set<i32> i32_set;
342  8: map<i32, i32> i32_map;
343}
344
345union ComparableUnion {
346  1: string string_field;
347  2: binary binary_field;
348}
349
350struct StructWithAUnion {
351  1: TestUnion test_union;
352}
353
354struct PrimitiveThenStruct {
355  1: i32 blah;
356  2: i32 blah2;
357  3: Backwards bw;
358}
359
360typedef map<i32,i32> SomeMap
361
362struct StructWithASomemap {
363  1: required SomeMap somemap_field;
364}
365
366struct BigFieldIdStruct {
367  1: string field1;
368  45: string field2;
369}
370
371struct BreaksRubyCompactProtocol {
372  1: string field1;
373  2: BigFieldIdStruct field2;
374  3: i32 field3;
375}
376
377struct TupleProtocolTestStruct {
378  optional i32 field1;
379  optional i32 field2;
380  optional i32 field3;
381  optional i32 field4;
382  optional i32 field5;
383  optional i32 field6;
384  optional i32 field7;
385  optional i32 field8;
386  optional i32 field9;
387  optional i32 field10;
388  optional i32 field11;
389  optional i32 field12;
390}
391
392struct ListDoublePerf {
393  1: list<double> field;
394}
395