| module thrift_test_common; | 
 |  | 
 | import std.stdio; | 
 | import thrift.test.ThriftTest_types; | 
 |  | 
 | enum ProtocolType { | 
 |   binary, | 
 |   compact, | 
 |   json | 
 | } | 
 |  | 
 | void writeInsanityReturn(in Insanity[Numberz][UserId] insane) { | 
 |   write("{"); | 
 |   foreach(key1, value1; insane) { | 
 |     writef("%s => {", key1); | 
 |     foreach(key2, value2; value1) { | 
 |       writef("%s => {", key2); | 
 |       write("{"); | 
 |       foreach(key3, value3; value2.userMap) { | 
 |         writef("%s => %s, ", key3, value3); | 
 |       } | 
 |       write("}, "); | 
 |  | 
 |       write("{"); | 
 |       foreach (x; value2.xtructs) { | 
 |         writef("{\"%s\", %s, %s, %s}, ", | 
 |           x.string_thing, x.byte_thing, x.i32_thing, x.i64_thing); | 
 |       } | 
 |       write("}"); | 
 |  | 
 |       write("}, "); | 
 |     } | 
 |     write("}, "); | 
 |   } | 
 |   write("}"); | 
 | } | 
 |  | 
 | Insanity[Numberz][UserId] testInsanityReturn; | 
 | int[int][int] testMapMapReturn; | 
 |  | 
 | static this() { | 
 |   testInsanityReturn = { | 
 |     Insanity[Numberz][UserId] insane; | 
 |  | 
 |     Xtruct hello; | 
 |     hello.string_thing = "Hello2"; | 
 |     hello.byte_thing = 2; | 
 |     hello.i32_thing = 2; | 
 |     hello.i64_thing = 2; | 
 |  | 
 |     Xtruct goodbye; | 
 |     goodbye.string_thing = "Goodbye4"; | 
 |     goodbye.byte_thing = 4; | 
 |     goodbye.i32_thing = 4; | 
 |     goodbye.i64_thing = 4; | 
 |  | 
 |     Insanity crazy; | 
 |     crazy.userMap[Numberz.EIGHT] = 8; | 
 |     crazy.xtructs ~= goodbye; | 
 |  | 
 |     Insanity looney; | 
 |     // The C++ TestServer also assigns these to crazy, but that is probably | 
 |     // an oversight. | 
 |     looney.userMap[Numberz.FIVE] = 5; | 
 |     looney.xtructs ~= hello; | 
 |  | 
 |     Insanity[Numberz] first_map; | 
 |     first_map[Numberz.TWO] = crazy; | 
 |     first_map[Numberz.THREE] = crazy; | 
 |     insane[1] = first_map; | 
 |  | 
 |     Insanity[Numberz] second_map; | 
 |     second_map[Numberz.SIX] = looney; | 
 |     insane[2] = second_map; | 
 |     return insane; | 
 |   }(); | 
 |  | 
 |   testMapMapReturn = { | 
 |     int[int] pos; | 
 |     int[int] neg; | 
 |  | 
 |     for (int i = 1; i < 5; i++) { | 
 |       pos[i] = i; | 
 |       neg[-i] = -i; | 
 |     } | 
 |  | 
 |     int[int][int] result; | 
 |     result[4] = pos; | 
 |     result[-4] = neg; | 
 |     return result; | 
 |   }(); | 
 | } |