- [ ] add `_DUMP_WITHOUT_NEXT` for use in callsites where `next` is already being dumped - [ ] `_DUMP` should be implemented by calling `_DUMP_WITHOUT_NEXT` then `_DUMP_NEXT`, if there is a `next` field - [ ] `_DUMP_WITHOUT_NEXT` should delegate to known child struct `DUMP_WITHOUT_NEXT` depending on `type`