https://ziglang.org/documentation/master/#Tagged-union
You create two types, a tag enum, and the tagged union itself, which has a typed "payload" for each tag.
Plus the necessary "syntax sugar" for initialization and extracting the payload by tag.