[
  {
    "type":"bool",
    "values":[
      {
        "description":"binary 0 is false",
        "buffer":[
          "0x00"
        ],
        "value": false
      },
      {
        "description":"1 is true",
        "buffer":[
          "0x01"
        ],
        "value": true
      }
    ]
  },
  {
    "type":"varint",
    "values":[
      {
        "description":"8-bit integer",
        "value":1,
        "buffer":["0x01"]
      },
      {
        "description":"8-bit maximum integer",
        "value":127,
        "buffer":["0x7f"]
      },
      {
        "description":"16-bit integer",
        "value":300,
        "buffer":["0xac", "0x02"]
      },
      {
        "description":"24-bit integer",
        "value":100000,
        "buffer":["0xa0", "0x8d", "0x06"]
      },
      {
        "description":"32-bit integer",
        "value":16909060,
        "buffer":["0x84", "0x86", "0x88", "0x08"]
      },
      {
        "description":"negative integer",
        "value":-1,
        "buffer":["0xff", "0xff", "0xff", "0xff", "0x0f"]
      },
      {
        "description":"maximum varint",
        "value":2147483647,
        "buffer":["0xff", "0xff", "0xff", "0xff", "0x07"]
      },
      {
        "description":"minimum varint",
        "value":-2147483648,
        "buffer":["0x80", "0x80", "0x80", "0x80", "0x08"]
      }
    ]
  },
  {
    "type":"buffer",
    "subtypes":[
      {
        "description":"a fixed size buffer",
        "type":["buffer",
          {
            "count":3
          }
        ],
        "values":[
          {
            "value":["0x05","0x10","0xAE"],
            "buffer":["0x05","0x10","0xAE"]
          }
        ]
      },
      {
        "description":"an u8 prefixed buffer",
        "type":["buffer",
          {
            "countType":"u8"
          }
        ],
        "values":[
          {
            "value":["0x05","0x10","0xAE"],
            "buffer":["0x03","0x05","0x10","0xAE"]
          }
        ]
      }
    ]
  },
  {
    "type":"pstring",
    "subtypes":[
      {

        "description":"fixed size string",
        "type":[
          "pstring",{
            "count":6
          }
        ],
        "values":[
          {
            "description":"simple hello",
            "buffer":[ "0x48", "0x65", "0x6C", "0x6C", "0x6F", "0x21"],
            "value":"Hello!"
          }
        ]
      },
      {
        "description":"i16 prefixed string",
        "type":[
          "pstring",{
            "countType":"i16"
          }
        ],
        "values":[
          {
            "description":"simple hello",
            "buffer":["0x00","0x06", "0x48", "0x65", "0x6C", "0x6C", "0x6F", "0x21"],
            "value":"Hello!"
          },
          {
            "description":"japanese",
            "buffer":["0x00","0x10", "0xE3", "0x81", "0x93", "0xE3", "0x82", "0x93", "0xE3", "0x81",
              "0xAB", "0xE3", "0x81", "0xA1", "0xE3", "0x81", "0xAF", "0x21"],
            "value":"こんにちは!"
          }
        ]
      },
      {
        "description":"varint prefixed string",
        "type":[
          "pstring",{
            "countType":"varint"
          }
        ],
        "values":[
          {
            "description":"simple hello",
            "buffer":["0x06", "0x48", "0x65", "0x6C", "0x6C", "0x6F", "0x21"],
            "value":"Hello!"
          },
          {
            "description":"japanese",
            "buffer":["0x10", "0xE3", "0x81", "0x93", "0xE3", "0x82", "0x93", "0xE3", "0x81",
              "0xAB", "0xE3", "0x81", "0xA1", "0xE3", "0x81", "0xAF", "0x21"],
            "value":"こんにちは!"
          }
        ]
      }
    ]
  },
  {
    "type":"cstring",
    "values":[
      {
        "description":"simple hello",
        "buffer":["0x48", "0x65", "0x6C", "0x6C", "0x6F", "0x21","0x00"],
        "value":"Hello!"
      },
      {
        "description":"japanese",
        "buffer":["0xE3", "0x81", "0x93", "0xE3", "0x82", "0x93", "0xE3", "0x81",
          "0xAB", "0xE3", "0x81", "0xA1", "0xE3", "0x81", "0xAF", "0x21","0x00"],
        "value":"こんにちは!"
      }
    ]
  },
  {
    "type":"void",
    "values":[
      {
        "description":"undefined",
        "buffer":[],
        "value":null
      }
    ]
  },
  {
    "type":"bitfield",
    "subtypes":[
      {
        "description":"an unsigned 8 bit number",
        "type":[
          "bitfield",[
            {
              "name": "one",
              "size": 8,
              "signed": false
            }
          ]
        ],
        "values":[
          {
            "buffer":[
              "0xff"
            ],
            "value":{
              "one": 255
            }
          }
        ]
      },
      {
        "description":"a signed 8 bit number",
        "type":[
          "bitfield",[
            {
              "name": "one",
              "size": 8,
              "signed": true
            }
          ]
        ],
        "values":[
          {
            "buffer":[
              "0xff"
            ],
            "value":{
              "one": -1
            }
          }
        ]
      },
      {
        "description":"multiple signed 8 bit numbers",
        "type":[
          "bitfield",[
            { "name": "one", "size": 8, "signed": true },
            { "name": "two", "size": 8, "signed": true },
            { "name": "three", "size": 8, "signed": true }
          ]
        ],
        "values":[
          {
            "buffer": [
              "0xff",
              "0x80",
              "0x12"
            ],
            "value": {
              "one": -1,
              "two": -128,
              "three": 18
            }
          }
        ]
      },
      {
        "description":"multiple unsigned 4 bit numbers",
        "type":[
          "bitfield",[
            { "name": "one", "size": 4, "signed": false },
            { "name": "two", "size": 4, "signed": false },
            { "name": "three", "size": 4, "signed": false }
          ]
        ],
        "values":[
          {
            "buffer":[
                "0xff",
                "0x80"
              ],
              "value":{ "one": 15, "two": 15, "three": 8 }
            }
        ]
      },
      {
        "description":"multiple signed 4 bit numbers",
        "type":[
          "bitfield",[
            { "name": "one", "size": 4, "signed": true },
            { "name": "two", "size": 4, "signed": true },
            { "name": "three", "size": 4, "signed": true }
          ]
        ],
        "values":[
          {
            "buffer":[
              "0xff",
              "0x80"
            ],
            "value":{ "one": -1, "two": -1, "three": -8 }
          }
        ]
      },
      {
        "description":"an unsigned 12 bit number",
        "type":[
          "bitfield",[
            { "name": "one", "size": 12, "signed": false }
          ]
        ],
        "values":[
          {
            "buffer":[
              "0xff",
              "0x80"
            ],
            "value":{ "one": 4088 }
          }
        ]
      },
      {
        "description":"a complex structure",
        "type":[
          "bitfield",[
            { "name": "x", "size": 26, "signed": true },
            { "name": "y", "size": 12, "signed": true },
            { "name": "z", "size": 26, "signed": true }
          ]
        ],
        "values":[
          {
            "buffer":[
              "0x00",
              "0x00",
              "0x03",
              "0x05",
              "0x30",
              "0x42",
              "0xE0",
              "0x65"
            ],
            "value":{ "x": 12, "y": 332, "z": 4382821 }
          }
        ]
      }
    ]
  },
  {
    "type":"mapper",
    "subtypes":[
      {
        "description": "a mapper mapping 0 to zero, 1 to one and 2 to two",
        "type": ["mapper",
          {
            "type":"u8",
            "mappings":{
              "0":"zero",
              "1":"one",
              "2":"two"
            }
          }
        ],
        "values":[
          {
            "description":"zero",
            "value":"zero",
            "buffer":["0x00"]
          },
          {
            "description":"two",
            "value":"two",
            "buffer":["0x02"]
          }
        ]
      }
    ]
  }
]