Releases: jonasbb/serde_with
serde_with v3.4.0
serde_with v3.3.0
Added
-
Support the
hashbrowntypeHashMapandHashSet(#636, #637)
Thanks to @OliverNChalk for raising the issue and submitting a PR.This extends the existing support for
HashMaps andHashSets to thehashbrowncrate v0.14.
The same conversions as for thestdandindexmaptypes are available, like general support for#[serde_as]and converting it to/from sequences or maps.
Changed
-
Generalize some trait bounds for
DeserializeAsimplementationsWhile working on #637 it came to light that some of the macros for generating
DeserializeAsimplementations were not as generic as they could.
This means they didn't work with custom hasher types, but only the default hashers.
This has now been fixed and custom hashers should work better, as long as they implementBuildHasher + Default. -
(internal) Change how features are documented (#639)
This change moves the feature documentation into
Cargo.tomlin a format that can be read by lib.rs.
It will improve the generated features documentation there.
The page with all features remains in the guide but is now generated from theCargo.tomlinformation.
serde_with v3.2.0
Added
- Add optional support for indexmap v2 (#621)
Support for v1 is already available using theindexmap_1feature.
This adds identical support for v2 of indexmap using theindexmap_2feature.
Changed
- Bump MSRV to 1.64, since that is required for the indexmap v2 dependency.
Fixed
serde_with v3.1.0
Added
-
Add
FromIntoRefandTryFromIntoRef(#618)
Thanks to @oblique for submitting the PR.The new types are similar to the existing
FromIntoandTryFromIntotypes.
They behave different during serialization, allowing the removal of theClonebound on theirSerializeAstrait implementation
Changed
- Improve documentation about cfg-gating
serde_as(#607) - Bump MSRV to 1.61 because that is required by the crate
cfg_eval.
serde_with v3.0.0
This breaking release should not impact most users.
It only affects custom character sets used for base64 of which there are no instances of on GitHub.
Changed
-
Upgrade base64 to v0.21 (#543)
Thanks to @jeff-hiner for submitting the PR.Remove support for custom character sets.
This is technically a breaking change.
A code search on GitHub revealed no instances of anyone using that, andserde_withships with many predefined character sets.
The removal means that future base64 upgrade will no longer be breaking changes.
serde_with v2.3.3
Changed
- Update
synto v2 anddarlingto v0.20 (#578)
Update proc-macro dependencies.
This change should have no impact on users, but now uses the same dependency asserde_derive.
serde_with v2.3.2
Changed
-
Improve the error message when deserializing
OneOrManyorPickFirstfails.
It now includes the original error message for each of the individual variants.
This is possible by dropping untagged enums as the internal implementations, since they will likely never support this, as these old PRs show serde#2376 and serde#1544.The new errors look like:
OneOrMany could not deserialize any variant: One: invalid type: map, expected u32 Many: invalid type: map, expected a sequencePickFirst could not deserialize any variant: First: invalid type: string "Abc", expected u32 Second: invalid digit found in string
Fixed
serde_with v2.3.1
Fixed
-
Undo the changes to the trait bound for
Seq. (#570, #571)
The new implementation caused issues with serialization formats that require the sequence length beforehand.
It also caused problems, that certain attributes which worked before no longer worked, due to mismatching number of references.Thanks to @stefunctional for reporting and for @stephaneyfx for providing a test case.
serde_with v2.3.0
Added
-
Add
serde_ascompatible versions for the existing duplicate key and value handling. (#534)
The new typesMapPreventDuplicates,MapFirstKeyWins,SetPreventDuplicates, andSetLastValueWinscan replace the existing modulesmaps_duplicate_key_is_error,maps_first_key_wins,sets_duplicate_value_is_error, andsets_last_value_wins. -
Added a new
KeyValueMaptype using the map key as a struct field. (#341)
This conversion is useful for maps, where an ID value is the map key, but the ID should become part of a single struct.
The conversion allows this, by using a special field named$key$.This conversion is possible for structs and maps, using the
$key$field.
Tuples, tuple structs, and sequences are supported by turning the first value into the map key.Each of the
SimpleStructs// Somewhere there is a collection: // #[serde_as(as = "KeyValueMap<_>")] // Vec<SimpleStruct>, #[derive(Serialize, Deserialize)] struct SimpleStruct { b: bool, // The field named `$key$` will become the map key #[serde(rename = "$key$")] id: String, i: i32, }
will turn into a JSON snippet like this.
"id-0000": { "b": false, "i": 123 },
Changed
- Relax the trait bounds of
Seqto allow for more custom types. (#565)
This extends the support beyond tuples.
Fixed
EnumMappasses thehuman_readablestatus of theSerializerto more places.- Support
allocon targets withouttarget_has_atomic = "ptr". (#560)
Thanks to @vembacher for reporting and fixing the issue.
serde_with v2.2.0
Added
-
Add new
MapandSeqtypes for converting between maps and tuple lists. (#527)The behavior is not new, but already present using
BTreeMap/HashMaporVec.
However, the new typesMapandSeqare also available onno_std, even without theallocfeature.
Changed
- Pin the
serde_with_macrosdependency to the same version as the main crate.
This simplifies publishing and ensures that always a compatible version is picked.
Fixed
serde_with::applyhad an issue matching types when invisible token groups where in use (#538)
The token groups can stem from macro_rules expansion, but should be treated mostly transparent.
The old code required a group to match a group, while now groups are silently removed when checking for type patterns.