Each member in the enum only has a single field, pointing to a separate struct that holds all of the data (see screenshot).
The solution was to just wrap these fields in a Box. They'll be stored on the heap, rather than the stack, but it means that the enum itself will only ever allocate 32 bytes.