Yaml rust
Separated from !192 (merged) so that !192 (merged) can be merged without having to worry about the breakages this introduces.
I've rewritten the yaml code to make use of the strongly-typed serde_yaml instead of PyYaml, since that does schema validation at parse time and is significantly faster than even PyYaml with the libyaml backend.
Fixes #123 (closed) and #100 (closed).
This breaks how we parse *Edit: No longer breaks metadata.yaml; it's just that now person! and group! tags are ignored by the parser and can (and should) be omitted.metadata.yaml, in particular, how we parse Person and Group objects, given that this uses strong contextual implicit typing rather than explicit typing using tags.
Currently implemented using a Person: and Group: map, I think it should be changed to untagged mappings to be more concise. serde_yaml supports determining type parsing based on provided fields:
Person (any field may be omitted. We probably want to enforce email for package maintainers, but this doesn't need to be enforced for upstream maintainers and I'm not sure about a good way of implementing that yet):
name: ""
email: ""
desc: ""
Group (single field with the name group):
group: ""
This signature has changed, however it's not currently used in openmw-mods, so the change shouldn't break anything.
As before, strings can be used to indicate the name field of a person (*Edit: And additionally the email if supplied in name <email> form). It might also be useful to support parsing a string representation of the form name <email>, but I'm not sure there's an easy way of having serde parse this automatically.
The Metadata wiki page needs to be updated to match the adjusted format (slight change to groups, and tags no longer used).