This has a few benefits:
- It allows for defining parsers/printer code blocks that can be shared between operations and attribute/types.
- It removes the weird duplication of generic parser/printer hooks, which means that newly added hooks only require touching one class.