{
  "protocol" : "MyProtocol",
  "namespace" : "com.foo",
  "types" : [ 
   {
	"type" : "record",
	"name" : "A",
	"fields" : [ { "name" : "f1", "type" : "long" } ]
   },
   {
	"type" : "enum",
	"name" : "MyEnum",
	"symbols" : [ "A", "B", "C" ]
   },
   {
   "type": "fixed", 
   "size": 16, 
   "name": "MyFixed"
   },
   {
	"type" : "record",
	"name" : "Simple",
	"fields" : 
			[ 	
				{ "name" : "myInt", "type" : "int" },
				{ "name" : "myLong", "type" : "long" },
				{ "name" : "myBool", "type" : "boolean" },
				{ "name" : "myDouble", "type" : "double" },
				{ "name" : "myFloat", "type" : "float" },
				{ "name" : "myBytes", "type" : "bytes" },
				{ "name" : "myString", "type" : "string" },
				{ "name" : "myNull", "type" : "null" },
 			]
   },   
   {
	"type" : "record",
	"name" : "Complex",
	"fields" : 
			[ 	
				{ "name" : "myUInt", "type" : [ "int", "null" ] },
				{ "name" : "myULong", "type" : [ "long", "null" ] },
				{ "name" : "myUBool", "type" : [ "boolean", "null" ] },
				{ "name" : "myUDouble", "type" : [ "double", "null" ] },
				{ "name" : "myUFloat", "type" : [ "float", "null" ] },
				{ "name" : "myUBytes", "type" : [ "bytes", "null" ] },
				{ "name" : "myUString", "type" : [ "string", "null" ] },
				
				{ "name" : "myInt", "type" : "int" },
				{ "name" : "myLong", "type" : "long" },
				{ "name" : "myBool", "type" : "boolean" },
				{ "name" : "myDouble", "type" : "double" },
				{ "name" : "myFloat", "type" : "float" },
				{ "name" : "myBytes", "type" : "bytes" },
				{ "name" : "myString", "type" : "string" },
				{ "name" : "myNull", "type" : "null" },

				{ "name" : "myFixed", "type" : "MyFixed" },								
				{ "name" : "myA", "type" : "A" },
				{ "name" : "myE", "type" : "MyEnum" },
				{ "name" : "myArray", "type" : { "type" : "array", "items" : "bytes" } },
				{ "name" : "myArray2", "type" : { "type" : "array", "items" : { "type" : "record", "name" : "newRec", "fields" : [ { "name" : "f1", "type" : "long"} ] } } },
				{ "name" : "myMap", "type" : { "type" : "map", "values" : "string" } },
				{ "name" : "myMap2", "type" : { "type" : "map", "values" : "newRec" } },
				{ "name" : "myObject", "type" : [ "MyEnum", "A", "null" ] },
                { "name" : "myArray3", "type" : { "type" : "array", "items" : { "type" : "array", "items" : [ "double", "string", "null" ] } } }
			]
   },
   {
	"type" : "record",
	"name" : "Wide",
	"fields" : 
			[ 	
				{ "name" : "myInt", "type" : "int" },
				{ "name" : "myLong", "type" : "long" },
				{ "name" : "myBool", "type" : "boolean" },
				{ "name" : "myDouble", "type" : "double" },
				{ "name" : "myFloat", "type" : "float" },
				{ "name" : "myBytes", "type" : "bytes" },
				{ "name" : "myString", "type" : "string" },
				{ "name" : "myA", "type" : "A" },
				{ "name" : "myE", "type" : "MyEnum" },
				{ "name" : "myInt2", "type" : "int" },
				{ "name" : "myLong2", "type" : "long" },
				{ "name" : "myBool2", "type" : "boolean" },
				{ "name" : "myDouble2", "type" : "double" },
				{ "name" : "myFloat2", "type" : "float" },
				{ "name" : "myBytes2", "type" : "bytes" },
				{ "name" : "myString2", "type" : "string" },
				{ "name" : "myA2", "type" : "A" },
				{ "name" : "myE2", "type" : "MyEnum" },
				{ "name" : "myInt3", "type" : "int" },
				{ "name" : "myLong3", "type" : "long" },
				{ "name" : "myBool3", "type" : "boolean" },
				{ "name" : "myDouble3", "type" : "double" },
				{ "name" : "myFloat3", "type" : "float" },
				{ "name" : "myBytes3", "type" : "bytes" },
				{ "name" : "myString3", "type" : "string" },
				{ "name" : "myA3", "type" : "A" },
				{ "name" : "myE3", "type" : "MyEnum" },
				{ "name" : "myInt4", "type" : "int" },
				{ "name" : "myLong4", "type" : "long" },
				{ "name" : "myBool4", "type" : "boolean" },
				{ "name" : "myDouble4", "type" : "double" },
				{ "name" : "myFloat4", "type" : "float" },
				{ "name" : "myBytes4", "type" : "bytes" },
				{ "name" : "myString4", "type" : "string" },
				{ "name" : "myA4", "type" : "A" },
				{ "name" : "myE4", "type" : "MyEnum" },
 			]
   },
   {
	"type" : "record",
	"name" : "Narrow",
	"fields" : 
			[ 	
				{ "name" : "myInt", "type" : "int" },
				{ "name" : "myLong", "type" : "long" },
				{ "name" : "myString", "type" : "string" }
 			]
   }
   ]
}