The main header is quite messy right now, with #defines everywhere, low visibility of the separation between generic structures and type-specific ones.
We could improve it quite a bit by:
- move forward-declarations of generic structures to a top section
- add documentation on all functions
- ensure good documentation for expected arguments of variadic functions
- move all #defines to a top section
- add parameter names to function prototypes
- check multiple variables don't share the same name