And fixed up the fact the promo types are optionally null/not there/empty/full
Very non-atomic - and I'm not even sure if it's half. I think I might stop here and actually try the derserialisation stuff