linebender / norad

Rust crate for working with Unified Font Object files
Apache License 2.0
44 stars 12 forks source link

Update quick-xml to 0.31.0 #337

Closed cmyr closed 7 months ago

cmyr commented 8 months ago

Something in quick-xml's internals changed in this version in a way that broke our admittedly hacky plist parsing.

Although the journey was long, the fix was easy: we need to explicitly handle the 'dict' key as a field when we are deserializing the lib.

This also includes a few more explicit 'skip_serializing_if' annotations, since once we were working again we were writing out empty strings in places where we hadn't been on the previous quick-xml.

One note on this impl that just occurs to me: it is possible now that deserialization will fail if the section of some object contains something other than a dict; we can discuss in review whether or not this is a problem.

cmyr commented 7 months ago

Now that I think about it we were already enforcing that the lib contains only a dict, just previously it would have been simpler to change this and also accept other plist data types. So no changes in our behaviour. (And we're about to release a new minor anyway, so a breaking change wouldn't be a big deal anyway)

rsheeter commented 7 months ago

I'm curious how you figured this out? - I played with it briefly and found it surprisingly opaque what the problem was. Admittedly I'm not over-familiar with norad or quick-xml but ... I'd still have expected more clues than I got.