enum Numberz
{
  ONE = 1,
  TWO,
  THREE,
  FIVE = 5,
  SIX,
  EIGHT = 8
}

typedef i64 UserId

struct Xtruct
{
  string string_thing = 0,
  byte   byte_thing = 1,
  i32    i32_thing = 3,
  i64    i64_thing = 5
}

struct Xtruct2
{
  byte   byte_thing,
  Xtruct struct_thing,
  i32    i32_thing
}

struct Insanity
{
  map<Numberz, UserId> userMap = 0,
  list<Xtruct> xtructs = 1
}

exception Exception {
    u32 errorCode,
    string message
}

exception Xception {
    u32 errorCode,
    Xtruct struct_thing
}
 
struct Empty {}
struct OneField {
   Empty field
}

service ThriftTest
{
  void         testVoid(),
  string       testString(string thing = 0),
  byte         testByte(byte thing = 0),
  i32          testI32(i32 thing = 0),
  i64          testI64(i64 thing = 0),
  Xtruct       testStruct(Xtruct thing = 0),
  Xtruct2      testNest(Xtruct2 thing = 0),
  map<i32,i32> testMap(map<i32,i32> thing = 0),
  set<i32>     testSet(set<i32> thing = 0),
  list<i32>    testList(list<i32> thing = 0),
  Numberz      testEnum(Numberz thing = 0),
  UserId       testTypedef(UserId thing = 0),

  map<i32,map<i32,i32>> testMapMap(i32 hello = 0),

  /* So you think you've got this all worked, out eh? */
  map<UserId, map<Numberz,Insanity>> testInsanity(Insanity argument = 0),

  /* Multiple parameters */
  
  Xtruct	testMulti(byte arg0, i32 arg1, u64 arg2, map<i16, string> arg3, Numberz arg4, UserId arg5),

  /* Exception specifier */

  Xtruct testException(string arg) throws(Exception err1),

  /* Multiple exceptions specifier */

  Xtruct testMultiException(string arg0, string arg1) throws(Exception err1=1, Xception err2)
}
