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.