// Naming testcases, sepcifically for these tickets (but not limited to them)
// THRIFT-2508 Uncompileable C# code due to language keywords in IDL
// THRIFT-2557 error CS0542 member names cannot be the same as their enclosing type


struct using {
	1: double single
	2: double integer
}

struct delegate {
	1: string partial
	2: delegate delegate
}

struct get {
	1: bool sbyte
}

struct partial {
	1: using using
}



struct ClassAndProp {
  1: bool ClassAndProp
  2: bool ClassAndProp_
  3: bool ClassAndProp__
  4: bool ClassAndProper
}

struct second_chance {
  1: bool SECOND_CHANCE
  2: bool SECOND_CHANCE_
  3: bool SECOND_CHANCE__
  4: bool SECOND_CHANCES
}

struct NOW_EAT_THIS {
  1: bool now_eat_this
  2: bool now_eat_this_
  3: bool now_eat_this__
  4: bool now_eat_this_and_this
}

struct TheEdgeCase {
  1: bool theEdgeCase
  2: bool theEdgeCase_
  3: bool theEdgeCase__
  4: bool TheEdgeCase
  5: bool TheEdgeCase_
  6: bool TheEdgeCase__
}

struct Tricky_ {
  1: bool tricky
  2: bool Tricky
}

struct Nested {
  1: ClassAndProp ClassAndProp 
  2: second_chance second_chance 
  3: NOW_EAT_THIS NOW_EAT_THIS 
  4: TheEdgeCase TheEdgeCase 
  5: Tricky_ Tricky_ 
  6: Nested Nested
}

exception Problem_ {
  1: bool problem
  2: bool Problem
}


service extern {
	delegate event(1: partial get)
	void Foo(1: Nested Foo_args) throws (1: Problem_ Foo_result)
}

// eof
