Skip to content

serde_with v2.3.0

Compare
Choose a tag to compare
@github-actions github-actions released this 09 Mar 22:41
· 388 commits to master since this release
900bc16

Added

  • Add serde_as compatible versions for the existing duplicate key and value handling. (#534)
    The new types MapPreventDuplicates, MapFirstKeyWins, SetPreventDuplicates, and SetLastValueWins can replace the existing modules maps_duplicate_key_is_error, maps_first_key_wins, sets_duplicate_value_is_error, and sets_last_value_wins.

  • Added a new KeyValueMap type 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 Seq to allow for more custom types. (#565)
    This extends the support beyond tuples.

Fixed

  • EnumMap passes the human_readable status of the Serializer to more places.
  • Support alloc on targets without target_has_atomic = "ptr". (#560)
    Thanks to @vembacher for reporting and fixing the issue.