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; }(); }