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