NOTE: This is deprecated in favor of the new Wiki. Check it out at https://github.com/dogtopus/minipb/wiki.

synopsis:
    [prefix]<type>[suffix]...
types:
    i sfixed32
    I fixed32
    q sfixed64
    Q fixed64
    l sfixed32 (alias of 'i')
    L sfixed32 (alias of 'I')
    f float
    d double
    a bytes
    b bool
    z sint (signed vint encoded with zigzag)
    t int (signed vint encoded with two's complement) (NOT recommended)
    T uint (unsigned vint) (unsigned vint encoded with two's complement)
    U string (in utf-8 format)
    v sint (alias of 'z')
    V uint (alias of 'T')
    x empty field
prefixes:
    * required
    + repeating field (accepts/returns a list of objects, each repeating field can only have 1 type of data)
    # packed repeating field (NOTE: Although it is possible to use packed repeating field with strings/bytes in MiniPB, it is not recommended since Google's Protobuf implementation does not allow packed strings/bytes)
    [ nested structure (embedded message) (accepts/returns a list of objects, must end with ])
suffixes:
    \d* set (\d*) fields to the specific _type_ (e.g. "i3" is same as "iii")

example:
    *U*tU+[*Ut]

    is equivalent to the following .proto file:
    (taken from https://developers.google.com/protocol-buffers/docs/overview)

    message Person {
      required string name = 1; // *U
      required int32 id = 2; // *t
      optional string email = 3; // U

      // enums are not supported natively in minipb. Use enums.IntEnum with a int field instead.
      enum PhoneType {
        MOBILE = 0;
        HOME = 1;
        WORK = 2;
      }

      message PhoneNumber { // [
        required string number = 1; // *U
        optional PhoneType type = 2 [default = HOME]; // t
      } // ]

      repeated PhoneNumber phone = 4; // +[*Ut]
    }
