New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Deserializer::deserialize_identifier
support for adjacently tagged enums
#2475
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR!
May I ask whether there is a specific publicly-available data format library you are working with where this makes a difference? Could you share a short program I could run to reproduce the error that happens under the old behavior?
I'm working on a compact binary format that is'nt meant to be publicly used (at least for now?), and it serialize struct as sequences. My tests looks like this, some simple round trip checks:
But I get this error:
I use a work around for struct-like types that don't implement This PR is'nt to fix my own library, I probably can find works around or can settle to serialize the field name, this is just to have consistency, it's a niche case that makes you rework a big portion of the format for no apparent reason. here is the repo, it's highly WIP and I put a very generic name that will be changed, if I publish it. You can find the tests in Edit: This PR also allows the use of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [serde](https://serde.rs) ([source](https://github.com/serde-rs/serde)) | dependencies | patch | `1.0.167` -> `1.0.171` | --- ### Release Notes <details> <summary>serde-rs/serde (serde)</summary> ### [`v1.0.171`](https://github.com/serde-rs/serde/releases/tag/v1.0.171) [Compare Source](serde-rs/serde@v1.0.170...v1.0.171) - Support `derive(Deserialize)` on unit structs that have const generics ([#​2500](serde-rs/serde#2500), thanks [@​Baptistemontan](https://github.com/Baptistemontan)) ### [`v1.0.170`](https://github.com/serde-rs/serde/releases/tag/v1.0.170) [Compare Source](serde-rs/serde@v1.0.169...v1.0.170) - Produce error message on suffixed string literals inside serde attributes ([#​2242](serde-rs/serde#2242)) - Support single identifier as unbraced default value for const generic parameter ([#​2449](serde-rs/serde#2449)) ### [`v1.0.169`](https://github.com/serde-rs/serde/releases/tag/v1.0.169) [Compare Source](serde-rs/serde@v1.0.168...v1.0.169) - Add Deserializer::deserialize_identifier support for adjacently tagged enums ([#​2475](serde-rs/serde#2475), thanks [@​Baptistemontan](https://github.com/Baptistemontan)) - Fix unused_braces lint in generated Deserialize impl that uses braced const generic expressions ([#​2414](serde-rs/serde#2414)) ### [`v1.0.168`](https://github.com/serde-rs/serde/releases/tag/v1.0.168) [Compare Source](serde-rs/serde@v1.0.167...v1.0.168) - Allow `serde::de::IgnoredAny` to be the type for a `serde(flatten)` field ([#​2436](serde-rs/serde#2436), thanks [@​Mingun](https://github.com/Mingun)) - Allow larger preallocated capacity for smaller elements ([#​2494](serde-rs/serde#2494)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi42LjAiLCJ1cGRhdGVkSW5WZXIiOiIzNi42LjAiLCJ0YXJnZXRCcmFuY2giOiJkZXZlbG9wIn0=--> Co-authored-by: cabr2-bot <cabr2.help@gmail.com> Co-authored-by: crapStone <crapstone01@gmail.com> Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1959 Reviewed-by: crapStone <crapstone01@gmail.com> Co-authored-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org> Co-committed-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
Adjancently tagged enum should behave like a struct with 2 elements, the tag and the content such as
This is the case for most format until you come across a format that serialize structs with fields identifier other than
&str
. for exemple auto derived struct handle the case where the field identifier is an unsigned number, or a&[u8]
, not just&str
.This is due to the fact that
TagOrContentFieldVisitor
andTagContentOtherFieldVisitor
directly callsDeserializer::deserialize_str
and only handle cases for&str
, any other format are rejected.This PR enable
TagOrContentFieldVisitor
andTagContentOtherFieldVisitor
to callDeserializer::visit_identifier
and handle the case for&str
,&[u8]
and unsigned numbers.This modifications should only allow more flexibility and should'nt conflict with flattened adjacently tagged enums, as those serialize as a map and not a struct.