A lot of them are just u32 length + byte string, and can be moved into a common parsing function.
Finally finished and figured out how maps are handled. It didn't encode the number of items, it's based on how many bytes you read. I also fixed arrays so they're also correct, and we'll see if sets break.