Macro joining Thrift structs.

Might be better to inline this if it only gets used once.

Also if we do a collect does that mean our Product could have types we don't want and we silently drop them?