It seems reasonable that a single type might, over time, become a union of types.
The wire representation doesn't carry enough information to know which of the union types was sent.
Using the first type of the union by convention might suffice.
This would not work if T is an array however. Is there a safer way to model unions? MsgPack extensions seem sensible, but they require embedding a length which complicates encoding. Ideally you want an extension sentinel, not container.