21.5.1 Struct Types

A simple struct type definition in Poke looks like:

type Packet =
  struct
  {
    byte magic;
    uint<16> length;
    byte[length] data;
  }

The above defines a “Packet”, which consists on a magic number encoded in a byte, a length encoded in an unsigned 16-bit integer, and an array of length bytes, which is the payload of the packet.

Each entry in the struct type above defines a struct field.

Each field has a type, which is mandatory, and a name, which is optional. Fields without names are not accessible (not even within the struct itself) but they are handy for expressing esoteric padding. See Padding and Alignment. Example:

type Imm64 =
  struct
  {
    uint<32> lo;
    uint<32>;
    uint<32> hi;
  }

It is not allowed to have several fields with the same name in the same struct. The compiler will complain if it finds such an occurrence.