there are 7 packages, listed in abstraction level order
- spi: bottom of the abstraction
- iterator/any: these two packages are tangled together, doing decoding
- output: doing encoding, should only depend on spi
- annotation: make spi accessible with annotation. everything here can be done using code
- fuzzy: pre-defined decoders to work with messy input
- extra: extra encoders/decoders, useful for a lot of people, but not all of them
- static_codegen: command to generate encoder/decoder statically