Draft: Serialize and deserialize with standard serde instances
Addresses issue #176 (closed) .
This adds a new pseudo-signature type, which is like (ABC) but actually serializes as a{sv}
(and writes the signatures accordingly). This therefore does not break API (no existing users use < or > in signatures) and allows vanilla Serialize/Deserialize instances to be used with SerializeDict-style serializations.
Advantages:
- No API compatibility break.
- Picks up all serde annotations because it uses standard serde instances
- Lets you serialize to dbus as dict and to JSON with the same serialize instance
Problems:
- Signature types are no longer literally one-to-one with dbus, now have to be converted before serializing (which can be done, but is a bit hackish)
- There's no way (I have found yet!) to recover this signature through a variant in deserialization, which means that these can't be used inside DeserializeDict or DeserializeValue. I had the idea of sneaking the signature in here:
https://gitlab.freedesktop.org/dbus/zbus/-/blob/main/zvariant/src/deserialize_value.rs#L41
... but couldn't figure out a way not to leak memory. This means that you can't use this inside a SerializeDict or a variant. But given that it offers a replacement to SerializeDict, that's not perhaps as big a problem. And I'm confident I can figure out that last issue.