Skip to content
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

Revisit of the representation of adjacently tagged enums tag #2505

Merged

Conversation

Baptistemontan
Copy link
Contributor

@Baptistemontan Baptistemontan commented Jul 11, 2023

This PR is a follow on #2496.

This is a proof of concept to evaluate if such feature would be interesting.

I've run some tests with serde_json and the output is the same, but still allow some format to take advantage of variant_index during serialization.

If it looks promising I can continue to work on it

@Baptistemontan Baptistemontan marked this pull request as draft July 11, 2023 17:56
Copy link
Member

@dtolnay dtolnay left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can confirm this looks promising. Thanks!

let expecting = format!("enum {}", tag);
quote_block! {
#[doc(hidden)]
struct __FieldVariant(pub __Field);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would expect this whole type to go in serde::__private::de instead of emitting a whole new type and set of trait impls into every single use of adjacently tagged enums.

pub struct AdjacentlyTaggedEnumVariant<F> {
    tag: &'static str,
    variants: &'static [&'static str],
    fields_enum: PhantomData<F>,
}

impl<'de, F> DeserializeSeed<'de> for AdjacentlyTaggedEnumVariant<F>
where
    F: Deserialize<'de>,
{
    type Value = F;
    ...
}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's what I wanted to do in the first place, but I just looked at Deserialize and because it don't take self I just moved on and did not thought of DeserializeSeed, I did something like this for serialization

@Baptistemontan
Copy link
Contributor Author

I did not realised that DeserializeSeed was imported only with feature = "std" so I had some trouble fixing the import.

Does something like this seams more appropriate ?

@Baptistemontan
Copy link
Contributor Author

Baptistemontan commented Jul 12, 2023

Is there a crate implementing a binary format that use variant_index to serialize enums and support adjacently tagged enums deserialization ?

I've looked into postcard but it does'nt support deserialize_identifier and deserialize_any so adjacently tagged enums are not supported (maybe #2475 broke it?).
And I looked at ciborium but it serialize enums with the variant name.

@dtolnay
Copy link
Member

dtolnay commented Jul 17, 2023

Is there a crate implementing a binary format that use variant_index to serialize enums and support adjacently tagged enums deserialization ?

I don't know of any. But if there is, then yes, we would have heard about it breaking from #2475.

@dtolnay
Copy link
Member

dtolnay commented Jul 30, 2023

This PR is still marked as draft. Are there concrete changes planned (what are they?), or was this supposed to be ready for review?

@Baptistemontan
Copy link
Contributor Author

@dtolnay I just forgot to open it for review, there is no changes planned

@Baptistemontan Baptistemontan marked this pull request as ready for review July 31, 2023 18:07
@Baptistemontan
Copy link
Contributor Author

There is conflicts needed to be resolved, I'm gonna need some time to understand why thoses changes has been made and what can I do to not break anything.

@Baptistemontan Baptistemontan changed the title POC on the revisit of the representation of adjacently tagged enums tag Revisit of the representation of adjacently tagged enums tag Jul 31, 2023
@Baptistemontan
Copy link
Contributor Author

All conflicts were related to the removal of try! in #2539

@dtolnay dtolnay linked an issue Aug 2, 2023 that may be closed by this pull request
Copy link
Member

@dtolnay dtolnay left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@dtolnay dtolnay force-pushed the rework_adjacently_tagged_enum branch from 5671c6b to 957ef20 Compare August 2, 2023 05:22
@dtolnay dtolnay merged commit 43035f6 into serde-rs:master Aug 2, 2023
16 checks passed
juntyr added a commit to juntyr/ron that referenced this pull request Aug 6, 2023
juntyr added a commit to ron-rs/ron that referenced this pull request Aug 6, 2023
@Mingun
Copy link
Contributor

Mingun commented Aug 14, 2023

This PR has some breaking changes that results in failing tests in quick-xml (tafia/quick-xml#630)

martin-g added a commit to apache/avro that referenced this pull request Aug 15, 2023
Also see serde-rs/serde#2496

Signed-off-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>
martin-g added a commit to apache/avro that referenced this pull request Aug 15, 2023
* Bump serde from 1.0.180 to 1.0.183 in /lang/rust

Bumps [serde](https://github.com/serde-rs/serde) from 1.0.180 to 1.0.183.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](serde-rs/serde@v1.0.180...v1.0.183)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update the Serde impl after serde-rs/serde#2505

Also see serde-rs/serde#2496

Signed-off-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>
martin-g pushed a commit to apache/avro that referenced this pull request Aug 15, 2023
* Bump serde from 1.0.180 to 1.0.183 in /lang/rust

Bumps [serde](https://github.com/serde-rs/serde) from 1.0.180 to 1.0.183.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](serde-rs/serde@v1.0.180...v1.0.183)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update the Serde impl after serde-rs/serde#2505

Also see serde-rs/serde#2496

Signed-off-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>
(cherry picked from commit e26943f)
tgeoghegan added a commit to divviup/janus that referenced this pull request Aug 15, 2023
Recent Serde changes ([1], [2]) changed the internal representation of
enums, breaking our test.

[1]: serde-rs/serde#2496
[2]: serde-rs/serde#2505
tgeoghegan added a commit to divviup/janus that referenced this pull request Aug 15, 2023
Recent Serde changes ([1], [2]) changed the internal representation of
enums, breaking our test.

[1]: serde-rs/serde#2496
[2]: serde-rs/serde#2505
@Baptistemontan Baptistemontan deleted the rework_adjacently_tagged_enum branch August 15, 2023 18:17
juntyr added a commit to juntyr/ron that referenced this pull request Aug 15, 2023
juntyr added a commit to juntyr/ron that referenced this pull request Aug 16, 2023
kjuulh added a commit to kjuulh/crunch that referenced this pull request Sep 24, 2023
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [anyhow](https://github.com/dtolnay/anyhow) | workspace.dependencies | patch | `1.0.71` -> `1.0.75` |
| [bytes](https://github.com/tokio-rs/bytes) | workspace.dependencies | major | `0.4` -> `1.5` |
| [capnp](https://github.com/capnproto/capnproto-rust) | dependencies | minor | `0.17.2` -> `0.18.1` |
| [capnpc](https://github.com/capnproto/capnproto-rust) | build-dependencies | minor | `0.17.2` -> `0.18.0` |
| [criterion](https://bheisler.github.io/criterion.rs/book/index.html) ([source](https://github.com/bheisler/criterion.rs)) | dev-dependencies | minor | `0.4` -> `0.5` |
| [prost-build](https://github.com/tokio-rs/prost) | build-dependencies | minor | `0.5` -> `0.12` |
| [prost-build](https://github.com/tokio-rs/prost) | workspace.dependencies | minor | `0.5` -> `0.12` |
| [serde](https://serde.rs) ([source](https://github.com/serde-rs/serde)) | workspace.dependencies | patch | `1.0.88` -> `1.0.188` |

---

### Release Notes

<details>
<summary>dtolnay/anyhow</summary>

### [`v1.0.75`](https://github.com/dtolnay/anyhow/releases/tag/1.0.75)

[Compare Source](https://github.com/dtolnay/anyhow/compare/1.0.74...1.0.75)

-   Partially work around rust-analyzer bug (https://github.com/rust-lang/rust-analyzer/issues/9911)

### [`v1.0.74`](https://github.com/dtolnay/anyhow/releases/tag/1.0.74)

[Compare Source](https://github.com/dtolnay/anyhow/compare/1.0.73...1.0.74)

-   Add bootstrap workaround to allow rustc to depend on anyhow ([#&#8203;320](https://github.com/dtolnay/anyhow/issues/320), thanks [@&#8203;RalfJung](https://github.com/RalfJung))

### [`v1.0.73`](https://github.com/dtolnay/anyhow/releases/tag/1.0.73)

[Compare Source](https://github.com/dtolnay/anyhow/compare/1.0.72...1.0.73)

-   Update backtrace support to nightly's new Error::provide API (https://github.com/rust-lang/rust/pull/113464, [#&#8203;319](https://github.com/dtolnay/anyhow/issues/319))

### [`v1.0.72`](https://github.com/dtolnay/anyhow/releases/tag/1.0.72)

[Compare Source](https://github.com/dtolnay/anyhow/compare/1.0.71...1.0.72)

-   Documentation improvements

</details>

<details>
<summary>tokio-rs/bytes</summary>

### [`v1.5.0`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;150-September-7-2023)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v1.4.0...v1.5.0)

##### Added

-   Add `UninitSlice::{new,uninit}` ([#&#8203;598](https://github.com/tokio-rs/bytes/issues/598), [#&#8203;599](https://github.com/tokio-rs/bytes/issues/599))
-   Implement `BufMut` for `&mut [MaybeUninit<u8>]` ([#&#8203;597](https://github.com/tokio-rs/bytes/issues/597))

##### Changed

-   Mark `BytesMut::extend_from_slice` as inline ([#&#8203;595](https://github.com/tokio-rs/bytes/issues/595))

### [`v1.4.0`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;140-January-31-2023)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v1.3.0...v1.4.0)

##### Added

-   Make `IntoIter` constructor public ([#&#8203;581](https://github.com/tokio-rs/bytes/issues/581))

##### Fixed

-   Avoid large reallocations when freezing `BytesMut` ([#&#8203;592](https://github.com/tokio-rs/bytes/issues/592))

##### Documented

-   Document which functions require `std` ([#&#8203;591](https://github.com/tokio-rs/bytes/issues/591))
-   Fix duplicate "the the" typos ([#&#8203;585](https://github.com/tokio-rs/bytes/issues/585))

### [`v1.3.0`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;130-November-20-2022)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v1.2.1...v1.3.0)

##### Added

-   Rename and expose `BytesMut::spare_capacity_mut` ([#&#8203;572](https://github.com/tokio-rs/bytes/issues/572))
-   Implement native-endian get and put functions for `Buf` and `BufMut` ([#&#8203;576](https://github.com/tokio-rs/bytes/issues/576))

##### Fixed

-   Don't have important data in unused capacity when calling reserve ([#&#8203;563](https://github.com/tokio-rs/bytes/issues/563))

##### Documented

-   `Bytes::new` etc should return `Self` not `Bytes` ([#&#8203;568](https://github.com/tokio-rs/bytes/issues/568))

### [`v1.2.1`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;121-July-30-2022)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v1.2.0...v1.2.1)

##### Fixed

-   Fix unbounded memory growth when using `reserve` ([#&#8203;560](https://github.com/tokio-rs/bytes/issues/560))

### [`v1.2.0`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;120-July-19-2022)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v1.1.0...v1.2.0)

##### Added

-   Add `BytesMut::zeroed` ([#&#8203;517](https://github.com/tokio-rs/bytes/issues/517))
-   Implement `Extend<Bytes>` for `BytesMut` ([#&#8203;527](https://github.com/tokio-rs/bytes/issues/527))
-   Add conversion from `BytesMut` to `Vec<u8>` ([#&#8203;543](https://github.com/tokio-rs/bytes/issues/543), [#&#8203;554](https://github.com/tokio-rs/bytes/issues/554))
-   Add conversion from `Bytes` to `Vec<u8>` ([#&#8203;547](https://github.com/tokio-rs/bytes/issues/547))
-   Add `UninitSlice::as_uninit_slice_mut()` ([#&#8203;548](https://github.com/tokio-rs/bytes/issues/548))
-   Add const to `Bytes::{len,is_empty}` ([#&#8203;514](https://github.com/tokio-rs/bytes/issues/514))

##### Changed

-   Reuse vector in `BytesMut::reserve` ([#&#8203;539](https://github.com/tokio-rs/bytes/issues/539), [#&#8203;544](https://github.com/tokio-rs/bytes/issues/544))

##### Fixed

-   Make miri happy ([#&#8203;515](https://github.com/tokio-rs/bytes/issues/515), [#&#8203;523](https://github.com/tokio-rs/bytes/issues/523), [#&#8203;542](https://github.com/tokio-rs/bytes/issues/542), [#&#8203;545](https://github.com/tokio-rs/bytes/issues/545), [#&#8203;553](https://github.com/tokio-rs/bytes/issues/553))
-   Make tsan happy ([#&#8203;541](https://github.com/tokio-rs/bytes/issues/541))
-   Fix `remaining_mut()` on chain ([#&#8203;488](https://github.com/tokio-rs/bytes/issues/488))
-   Fix amortized asymptotics of `BytesMut` ([#&#8203;555](https://github.com/tokio-rs/bytes/issues/555))

##### Documented

-   Redraw layout diagram with box drawing characters ([#&#8203;539](https://github.com/tokio-rs/bytes/issues/539))
-   Clarify `BytesMut::unsplit` docs ([#&#8203;535](https://github.com/tokio-rs/bytes/issues/535))

### [`v1.1.0`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;110-August-25-2021)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v1.0.1...v1.1.0)

##### Added

-   `BufMut::put_bytes(self, val, cnt)` ([#&#8203;487](https://github.com/tokio-rs/bytes/issues/487))
-   Implement `From<Box<[u8]>>` for `Bytes` ([#&#8203;504](https://github.com/tokio-rs/bytes/issues/504))

##### Changed

-   Override `put_slice` for `&mut [u8]` ([#&#8203;483](https://github.com/tokio-rs/bytes/issues/483))
-   Panic on integer overflow in `Chain::remaining` ([#&#8203;482](https://github.com/tokio-rs/bytes/issues/482))
-   Add inline tags to `UninitSlice` methods ([#&#8203;443](https://github.com/tokio-rs/bytes/issues/443))
-   Override `copy_to_bytes` for Chain and Take ([#&#8203;481](https://github.com/tokio-rs/bytes/issues/481))
-   Keep capacity when unsplit on empty other buf ([#&#8203;502](https://github.com/tokio-rs/bytes/issues/502))

##### Documented

-   Clarify `BufMut` allocation guarantees ([#&#8203;501](https://github.com/tokio-rs/bytes/issues/501))
-   Clarify `BufMut::put_int` behavior ([#&#8203;486](https://github.com/tokio-rs/bytes/issues/486))
-   Clarify actions of `clear` and `truncate`. ([#&#8203;508](https://github.com/tokio-rs/bytes/issues/508))

### [`v1.0.1`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;101-January-11-2021)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v1.0.0...v1.0.1)

##### Changed

-   mark `Vec::put_slice` with `#[inline]` ([#&#8203;459](https://github.com/tokio-rs/bytes/issues/459))

##### Fixed

-   Fix deprecation warning ([#&#8203;457](https://github.com/tokio-rs/bytes/issues/457))
-   use `Box::into_raw` instead of `mem::forget`-in-disguise ([#&#8203;458](https://github.com/tokio-rs/bytes/issues/458))

### [`v1.0.0`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;100-December-22-2020)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.6.0...v1.0.0)

##### Changed

-   Rename `Buf`/`BufMut` methods `bytes()` and `bytes_mut()` to `chunk()` and `chunk_mut()` ([#&#8203;450](https://github.com/tokio-rs/bytes/issues/450))

##### Removed

-   remove unused Buf implementation. ([#&#8203;449](https://github.com/tokio-rs/bytes/issues/449))

### [`v0.6.0`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;060-October-21-2020)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.5.6...v0.6.0)

API polish in preparation for a 1.0 release.

##### Changed

-   `BufMut` is now an `unsafe` trait ([#&#8203;432](https://github.com/tokio-rs/bytes/issues/432)).
-   `BufMut::bytes_mut()` returns `&mut UninitSlice`, a type owned by `bytes` to
    avoid undefined behavior ([#&#8203;433](https://github.com/tokio-rs/bytes/issues/433)).
-   `Buf::copy_to_bytes(len)` replaces `Buf::into_bytes()` ([#&#8203;439](https://github.com/tokio-rs/bytes/issues/439)).
-   `Buf`/`BufMut` utility methods are moved onto the trait and `*Ext` traits are
    removed ([#&#8203;431](https://github.com/tokio-rs/bytes/issues/431)).

##### Removed

-   `BufMut::bytes_vectored_mut()` ([#&#8203;430](https://github.com/tokio-rs/bytes/issues/430)).
-   `new` methods on combinator types ([#&#8203;434](https://github.com/tokio-rs/bytes/issues/434)).

### [`v0.5.6`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;056-July-13-2020)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.5.5...v0.5.6)

-   Improve `BytesMut` to reuse buffer when fully `advance`d.
-   Mark `BytesMut::{as_mut, set_len}` with `#[inline]`.
-   Relax synchronization when cloning in shared vtable of `Bytes`.
-   Move `loom` to `dev-dependencies`.

### [`v0.5.5`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;055-June-18-2020)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.5.4...v0.5.5)

##### Added

-   Allow using the `serde` feature in `no_std` environments ([#&#8203;385](https://github.com/tokio-rs/bytes/issues/385)).

##### Fix

-   Fix `BufMut::advance_mut` to panic if advanced passed the capacity ([#&#8203;354](https://github.com/tokio-rs/bytes/issues/354))..
-   Fix `BytesMut::freeze` ignoring amount previously `advance`d ([#&#8203;352](https://github.com/tokio-rs/bytes/issues/352)).

### [`v0.5.4`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;054-January-23-2020)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.5.3...v0.5.4)

##### Added

-   Make `Bytes::new` a `const fn`.
-   Add `From<BytesMut>` for `Bytes`.

##### Fix

-   Fix reversed arguments in `PartialOrd` for `Bytes`.
-   Fix `Bytes::truncate` losing original capacity when repr is an unshared `Vec`.
-   Fix `Bytes::from(Vec)` when allocator gave `Vec` a pointer with LSB set.
-   Fix panic in `Bytes::slice_ref` if argument is an empty slice.

### [`v0.5.3`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;053-December-12-2019)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.5.2...v0.5.3)

##### Added

-   `must_use` attributes to `split`, `split_off`, and `split_to` methods ([#&#8203;337](https://github.com/tokio-rs/bytes/issues/337)).

##### Fix

-   Potential freeing of a null pointer in `Bytes` when constructed with an empty `Vec<u8>` ([#&#8203;341](https://github.com/tokio-rs/bytes/issues/341), [#&#8203;342](https://github.com/tokio-rs/bytes/issues/342)).
-   Calling `Bytes::truncate` with a size large than the length will no longer clear the `Bytes` ([#&#8203;333](https://github.com/tokio-rs/bytes/issues/333)).

### [`v0.5.2`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;052-November-27-2019)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.5.1...v0.5.2)

##### Added

-   `Limit` methods `into_inner`, `get_ref`, `get_mut`, `limit`, and `set_limit` ([#&#8203;325](https://github.com/tokio-rs/bytes/issues/325)).

### [`v0.5.1`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;051-November-25-2019)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.5.0...v0.5.1)

##### Fix

-   Growth documentation for `BytesMut` ([#&#8203;321](https://github.com/tokio-rs/bytes/issues/321))

### [`v0.5.0`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;050-November-25-2019)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.12...v0.5.0)

##### Fix

-   Potential overflow in `copy_to_slice`

##### Changed

-   Increased minimum supported Rust version to 1.39.
-   `Bytes` is now a "trait object", allowing for custom allocation strategies ([#&#8203;298](https://github.com/tokio-rs/bytes/issues/298))
-   `BytesMut` implicitly grows internal storage. `remaining_mut()` returns
    `usize::MAX` ([#&#8203;316](https://github.com/tokio-rs/bytes/issues/316)).
-   `BufMut::bytes_mut` returns `&mut [MaybeUninit<u8>]` to reflect the unknown
    initialization state ([#&#8203;305](https://github.com/tokio-rs/bytes/issues/305)).
-   `Buf` / `BufMut` implementations for `&[u8]` and `&mut [u8]`
    respectively ([#&#8203;261](https://github.com/tokio-rs/bytes/issues/261)).
-   Move `Buf` / `BufMut` "extra" functions to an extension trait ([#&#8203;306](https://github.com/tokio-rs/bytes/issues/306)).
-   `BufMutExt::limit` ([#&#8203;309](https://github.com/tokio-rs/bytes/issues/309)).
-   `Bytes::slice` takes a `RangeBounds` argument ([#&#8203;265](https://github.com/tokio-rs/bytes/issues/265)).
-   `Bytes::from_static` is now a `const fn` ([#&#8203;311](https://github.com/tokio-rs/bytes/issues/311)).
-   A multitude of smaller performance optimizations.

##### Added

-   `no_std` support ([#&#8203;281](https://github.com/tokio-rs/bytes/issues/281)).
-   `get_*`, `put_*`, `get_*_le`, and `put_*le` accessors for handling byte order.
-   `BorrowMut` implementation for `BytesMut` ([#&#8203;185](https://github.com/tokio-rs/bytes/issues/185)).

##### Removed

-   `IntoBuf` ([#&#8203;288](https://github.com/tokio-rs/bytes/issues/288)).
-   `Buf` implementation for `&str` ([#&#8203;301](https://github.com/tokio-rs/bytes/issues/301)).
-   `byteorder` dependency ([#&#8203;280](https://github.com/tokio-rs/bytes/issues/280)).
-   `iovec` dependency, use `std::IoSlice` instead ([#&#8203;263](https://github.com/tokio-rs/bytes/issues/263)).
-   optional `either` dependency ([#&#8203;315](https://github.com/tokio-rs/bytes/issues/315)).
-   optional `i128` feature -- now available on stable. ([#&#8203;276](https://github.com/tokio-rs/bytes/issues/276)).

### [`v0.4.12`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;0412-March-6-2019)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.11...v0.4.12)

##### Added

-   Implement `FromIterator<&'a u8>` for `BytesMut`/`Bytes` ([#&#8203;244](https://github.com/tokio-rs/bytes/issues/244)).
-   Implement `Buf` for `VecDeque` ([#&#8203;249](https://github.com/tokio-rs/bytes/issues/249)).

### [`v0.4.11`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;0411-November-17-2018)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.10...v0.4.11)

-   Use raw pointers for potentially racy loads ([#&#8203;233](https://github.com/tokio-rs/bytes/issues/233)).
-   Implement `BufRead` for `buf::Reader` ([#&#8203;232](https://github.com/tokio-rs/bytes/issues/232)).
-   Documentation tweaks ([#&#8203;234](https://github.com/tokio-rs/bytes/issues/234)).

### [`v0.4.10`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;0410-September-4-2018)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.9...v0.4.10)

-   impl `Buf` and `BufMut` for `Either` ([#&#8203;225](https://github.com/tokio-rs/bytes/issues/225)).
-   Add `Bytes::slice_ref` ([#&#8203;208](https://github.com/tokio-rs/bytes/issues/208)).

### [`v0.4.9`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;049-July-12-2018)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.8...v0.4.9)

-   Add 128 bit number support behind a feature flag ([#&#8203;209](https://github.com/tokio-rs/bytes/issues/209)).
-   Implement `IntoBuf` for `&mut [u8]`

### [`v0.4.8`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;048-May-25-2018)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.7...v0.4.8)

-   Fix panic in `BytesMut` `FromIterator` implementation.
-   Bytes: Recycle space when reserving space in vec mode ([#&#8203;197](https://github.com/tokio-rs/bytes/issues/197)).
-   Bytes: Add resize fn ([#&#8203;203](https://github.com/tokio-rs/bytes/issues/203)).

### [`v0.4.7`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;047-April-27-2018)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.6...v0.4.7)

-   Make `Buf` and `BufMut` usable as trait objects ([#&#8203;186](https://github.com/tokio-rs/bytes/issues/186)).
-   impl BorrowMut for BytesMut ([#&#8203;185](https://github.com/tokio-rs/bytes/issues/185)).
-   Improve accessor performance ([#&#8203;195](https://github.com/tokio-rs/bytes/issues/195)).

### [`v0.4.6`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;046-Janary-8-2018)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.5...v0.4.6)

-   Implement FromIterator for Bytes/BytesMut ([#&#8203;148](https://github.com/tokio-rs/bytes/issues/148)).
-   Add `advance` fn to Bytes/BytesMut ([#&#8203;166](https://github.com/tokio-rs/bytes/issues/166)).
-   Add `unsplit` fn to `BytesMut` ([#&#8203;162](https://github.com/tokio-rs/bytes/issues/162), [#&#8203;173](https://github.com/tokio-rs/bytes/issues/173)).
-   Improvements to Bytes split fns ([#&#8203;92](https://github.com/tokio-rs/bytes/issues/92)).

### [`v0.4.5`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;045-August-12-2017)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.4...v0.4.5)

-   Fix range bug in `Take::bytes`
-   Misc performance improvements
-   Add extra `PartialEq` implementations.
-   Add `Bytes::with_capacity`
-   Implement `AsMut[u8]` for `BytesMut`

### [`v0.4.4`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;044-May-26-2017)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.3...v0.4.4)

-   Add serde support behind feature flag
-   Add `extend_from_slice` on `Bytes` and `BytesMut`
-   Add `truncate` and `clear` on `Bytes`
-   Misc additional std trait implementations
-   Misc performance improvements

### [`v0.4.3`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;043-April-30-2017)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.2...v0.4.3)

-   Fix Vec::advance_mut bug
-   Bump minimum Rust version to 1.15
-   Misc performance tweaks

### [`v0.4.2`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;042-April-5-2017)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.1...v0.4.2)

-   Misc performance tweaks
-   Improved `Debug` implementation for `Bytes`
-   Avoid some incorrect assert panics

### [`v0.4.1`](https://github.com/tokio-rs/bytes/blob/HEAD/CHANGELOG.md#&#8203;0412-March-6-2019)

[Compare Source](https://github.com/tokio-rs/bytes/compare/v0.4.0...v0.4.1)

##### Added

-   Implement `FromIterator<&'a u8>` for `BytesMut`/`Bytes` ([#&#8203;244](https://github.com/tokio-rs/bytes/issues/244)).
-   Implement `Buf` for `VecDeque` ([#&#8203;249](https://github.com/tokio-rs/bytes/issues/249)).

</details>

<details>
<summary>capnproto/capnproto-rust</summary>

### [`v0.18.1`](https://github.com/capnproto/capnproto-rust/compare/capnp-v0.18.0...capnp-v0.18.1)

[Compare Source](https://github.com/capnproto/capnproto-rust/compare/capnp-v0.18.0...capnp-v0.18.1)

### [`v0.18.0`](https://github.com/capnproto/capnproto-rust/compare/capnpc-v0.17.2...capnpc-v0.18.0)

[Compare Source](https://github.com/capnproto/capnproto-rust/compare/capnp-v0.17.2...capnp-v0.18.0)

</details>

<details>
<summary>bheisler/criterion.rs</summary>

### [`v0.5.1`](https://github.com/bheisler/criterion.rs/blob/HEAD/CHANGELOG.md#&#8203;051---2023-05-26)

[Compare Source](https://github.com/bheisler/criterion.rs/compare/0.5.0...0.5.1)

##### Fixed

-   Quick mode (--quick) no longer crashes with measured times over 5 seconds when --noplot is not active

### [`v0.5.0`](https://github.com/bheisler/criterion.rs/blob/HEAD/CHANGELOG.md#&#8203;050---2023-05-23)

[Compare Source](https://github.com/bheisler/criterion.rs/compare/0.4.0...0.5.0)

##### Changed

-   Replaced lazy_static dependency with once_cell
-   Improved documentation of the `html_reports` feature
-   Replaced atty dependency with is-terminal
-   MSRV bumped to 1.64
-   Upgraded clap dependency to v4
-   Upgraded tempfile dependency to v3.5.0

##### Fixed

-   Quick mode (`--quick`) no longer outputs 1ms for measured times over 5 seconds
-   Documentation updates

</details>

<details>
<summary>tokio-rs/prost</summary>

### [`v0.12.1`](https://github.com/tokio-rs/prost/compare/v0.12.0...v0.12.1)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.12.0...v0.12.1)

### [`v0.12.0`](https://github.com/tokio-rs/prost/releases/tag/v0.12.0)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.11.9...v0.12.0)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

This patch updates brings a few new features and fixes:

-   Bump `syn`  to version 2
-   Bump MSRV to 1.64
-   Added `TryFrom<i32>` for enums
-   Optional debug implementations
-   Initial generic `Any` and `Name` impl/traits.

### [`v0.11.9`](https://github.com/tokio-rs/prost/releases/tag/v0.11.9)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.11.8...v0.11.9)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

This patch updates brings a few new features and fixes:

-   build: Support boxing fields via `Config::boxed` ([#&#8203;802](https://github.com/tokio-rs/prost/pull/802))

### [`v0.11.8`](https://github.com/tokio-rs/prost/releases/tag/v0.11.8)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.11.7...v0.11.8)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

This patch updates brings a few new features and fixes:

-   types: Fix unintentional change in compiler module visibility [#&#8203;824](https://github.com/tokio-rs/prost/pull/824)

`prost-types` 0.11.7 was yanked due to the above unintentional semver breakage.

### [`v0.11.7`](https://github.com/tokio-rs/prost/compare/v0.11.6...v0.11.7)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.11.6...v0.11.7)

### [`v0.11.6`](https://github.com/tokio-rs/prost/releases/tag/v0.11.6)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.11.5...v0.11.6)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

This patch updates brings a few new features and fixes:

-   build: Add message and enum attributes (https://github.com/tokio-rs/prost/pull/784)

### [`v0.11.5`](https://github.com/tokio-rs/prost/releases/tag/v0.11.5)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.11.4...v0.11.5)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

This patch updates brings a few new features and fixes:

-   build: Allow file descriptor be generated without --include_source_info (https://github.com/tokio-rs/prost/pull/786)
-   build: Expose from_str_name for generated enums (https://github.com/tokio-rs/prost/pull/774)

### [`v0.11.4`](https://github.com/tokio-rs/prost/releases/tag/v0.11.4)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.11.3...v0.11.4)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

This patch updates brings a few new features and fixes:

-   build: Add clippy allow lint to all code generated prost structs

### [`v0.11.3`](https://github.com/tokio-rs/prost/releases/tag/v0.11.3)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.11.2...v0.11.3)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

This patch updates brings a few new features and fixes:

-   build: Use `log` to print error logs.
-   build: Remove accidentally included prints.
-   build: Improve debian error message hint.

### [`v0.11.2`](https://github.com/tokio-rs/prost/releases/tag/v0.11.2)

[Compare Source](https://github.com/tokio-rs/prost/compare/prost-build-0.11.1...v0.11.2)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

This patch updates brings a few new features and fixes:

-   build: Improve `protoc` sourcing instructions in error messages.
-   build: Add `Clone` to `Service` types.
-   build: Sort modules to produce deterministic include files.
-   core: Tuple struct support.
-   build: Allow generated code derive path's to be changed.
-   build: Allow changing prost crate path.
-   build: Add code formatting support.

### [`v0.11.1`](https://github.com/tokio-rs/prost/releases/tag/prost-build-0.11.1): prost-build-v0.11.1

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.11.0...prost-build-0.11.1)

-   Removes extra spaces in doc generation

### [`v0.11.0`](https://github.com/tokio-rs/prost/releases/tag/v0.11.0)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.10.4...v0.11.0)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

Relase 0.11 brings a few breaking changes and changes to how prost sources protoc.

-   `prost-build` now requires `protoc` to be available in the path or set
    via the `PROTOC` env var.
-   `prost-types` now contains new `Timestamp`/`Duration` `FromStr` implementations.
-   MSRV bump to `1.56` and all crates have been moved to edition 2021

Notible changes that are not breaking:

-   `prost-build` now has a `cleanup-markdown` feature for cleaining up
    code blocks from protobuf files so that they work under rustdoc tests.
-   `prost-build` now generates `as_str_name` for message types.

### [`v0.10.4`](https://github.com/tokio-rs/prost/releases/tag/v0.10.4)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.10.3...v0.10.4)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

Small fix for compiling protoc from source to speed up compile times.

### [`v0.10.3`](https://github.com/tokio-rs/prost/releases/tag/v0.10.3)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.10.2...v0.10.3)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

This release reverts [#&#8203;605](https://github.com/tokio-rs/prost/issues/605) and contains some typo fixes.

(this release is actually the `v0.10.2` release but `prost-build` had to be yanked because of a local publish issue)

### [`v0.10.2`](https://github.com/tokio-rs/prost/releases/tag/v0.10.2)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.10.1...v0.10.2)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

This release reverts [#&#8203;605](https://github.com/tokio-rs/prost/issues/605) and contains some typo fixes.

(this release was yanked due to missing third-party source, `v0.10.3` is now the active release for this)

### [`v0.10.1`](https://github.com/tokio-rs/prost/releases/tag/v0.10.1)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.10.0...v0.10.1)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

This minor release brings no new code changes but symlinks license files in all the crates.

### [`v0.10.0`](https://github.com/tokio-rs/prost/releases/tag/v0.10.0)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.9.0...v0.10.0)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

Release 0.10 brings a few new ....

-   `protoc` is no longer bundled but is now compiled from bundled source
-   Minor performance improvements
-   Methods exposed to allow third party protobuf generation libraries

### [`v0.9.0`](https://github.com/tokio-rs/prost/releases/tag/v0.9.0)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.8.0...v0.9.0)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

Release 0.9.0 brings in many helpful changes and fixes, here are a few highlights:

-   Apple silicon support
-   Improve encode/decode varint performance
-   Support no package declaration
-   Support single include files
-   Fix multiple attribute support

### [`v0.8.0`](https://github.com/tokio-rs/prost/releases/tag/v0.8.0)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.7.0...v0.8.0)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

*NOTE: This version contains a security fix for `prost-types` and is recommend that you upgrade to it from <0.7.*

`prost` 0.8.0 includes breaking changes:

-   `Timestamp`'s `From` implementation for converting into `SystemTime` has been converted to a fallible `TryFrom` implementation.
-   `prost-build`'s `compile_protos` now takes `impl AsRef<Path>` to allow each parameter to use its own generic type.
-   Bundled `protoc` version bumped to `3.15.8`

As well as many new (non-breaking) changes:

-   [@&#8203;pluth](https://github.com/pluth) enabled zero-copy support for `Bytes` based fields.
-   [@&#8203;sfackler](https://github.com/sfackler) for fixing message optionals and oneofs in `prost-build`.
-   [@&#8203;rubdos](https://github.com/rubdos) for adding the ability to encode prost messages directly to a `Vec<u8>`.

and numerous smaller fixes. Many thanks to the generous contributors who have helped out since 0.7:

-   [@&#8203;dfreese](https://github.com/dfreese)
-   [@&#8203;carols10cents](https://github.com/carols10cents)
-   [@&#8203;pluth](https://github.com/pluth)
-   [@&#8203;jfornoff](https://github.com/jfornoff)
-   [@&#8203;sphw](https://github.com/sphw)
-   [@&#8203;bpowers](https://github.com/bpowers)
-   [@&#8203;sfackler](https://github.com/sfackler)
-   [@&#8203;koushiro](https://github.com/koushiro)
-   [@&#8203;dbrgn](https://github.com/dbrgn)
-   [@&#8203;argv-minus-one](https://github.com/argv-minus-one)
-   [@&#8203;nagisa](https://github.com/nagisa)
-   [@&#8203;evanj](https://github.com/evanj)
-   [@&#8203;aquarhead](https://github.com/aquarhead)

### [`v0.7.0`](https://github.com/tokio-rs/prost/releases/tag/v0.7.0)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.6.1...v0.7.0)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

`prost` 0.7.0 includes breaking changes:

-   The minimum-supported Rust version (MSRV) is now 1.46.0.
-   The `bytes` public dependency version is now 1.0.
-   The bundled `protoc` version is now 3.14.0.

As well as many new (non-breaking) features and improvements:

-   [@&#8203;hockeybuggy](https://github.com/hockeybuggy) added support for `deprecated` field annotations.
-   [@&#8203;garbageslam](https://github.com/garbageslam) and [@&#8203;dflemstr](https://github.com/dflemstr) added `no_std` support.
-   [@&#8203;joseph-wakeling-frequenz](https://github.com/joseph-wakeling-frequenz) fixed a bug in Timestamp <-> SystemTime conversions.
-   [@&#8203;rolftimmermans](https://github.com/rolftimmermans) added support for generating Rust `bytes::Bytes` fields from protobuf `bytes` fields. When deserializing from a `Bytes` instance, this enables zero-copy deserialization for `bytes` fields!
-   [@&#8203;olix0r](https://github.com/olix0r) bumped the `bytes` dependency to 0.6, which included most of the heavy lifting for the subsequent move to `bytes` 1.0.
-   [@&#8203;danburkert](https://github.com/danburkert) added support for the experimental proto3 optional field presence feature.

and numerous smaller fixes. Many thanks to the generous contributors who have helped out since 0.6.1:

-   M@ Dunlap
-   [@&#8203;Max-Meldrum](https://github.com/Max-Meldrum)
-   [@&#8203;Veetaha](https://github.com/Veetaha)
-   [@&#8203;dan-fritchman](https://github.com/dan-fritchman)
-   [@&#8203;danburkert](https://github.com/danburkert)
-   [@&#8203;dflemstr](https://github.com/dflemstr)
-   [@&#8203;dfreese](https://github.com/dfreese)
-   [@&#8203;gabrielrussoc](https://github.com/gabrielrussoc)
-   [@&#8203;garbageslam](https://github.com/garbageslam)
-   [@&#8203;hockeybuggy](https://github.com/hockeybuggy)
-   [@&#8203;jen20](https://github.com/jen20)
-   [@&#8203;joseph-wakeling-frequenz](https://github.com/joseph-wakeling-frequenz)
-   [@&#8203;olix0r](https://github.com/olix0r)
-   [@&#8203;oll3](https://github.com/oll3)
-   [@&#8203;repi](https://github.com/repi)
-   [@&#8203;rolftimmermans](https://github.com/rolftimmermans)
-   [@&#8203;vorot93](https://github.com/vorot93)
-   [@&#8203;wchargin](https://github.com/wchargin)

### [`v0.6.1`](https://github.com/tokio-rs/prost/releases/tag/v0.6.1)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.6.0...v0.6.1)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

`prost` 0.6.1 fixes a bug in which decoding untrusted input could overflow the stack. The bug was reported by [@&#8203;dbrgn](https://github.com/dbrgn) in [#&#8203;267](https://github.com/tokio-rs/prost/issues/267) (with an attached repro!), and fixed by [@&#8203;danburkert](https://github.com/danburkert). The fix extended the same recursion limits introduced in [#&#8203;186](https://github.com/tokio-rs/prost/issues/186) by [@&#8203;nrc](https://github.com/nrc) (released in 0.6.0) to the logic which skips unknown fields during decoding, which became recursive when support was added for decoding groups (also released in 0.6.0). The 0.6.0 release of the `prost` crates has been yanked from crates.io.

Additionally, [@&#8203;koushiro](https://github.com/koushiro) updated the private dependencies of all `prost` crates to the latest versions.

Many thanks to the generous contributors who have helped out since 0.6.0:

-   Dan Burkert
-   Danilo Bargen
-   Qinxuan Chen

### [`v0.6.0`](https://github.com/tokio-rs/prost/releases/tag/v0.6.0)

[Compare Source](https://github.com/tokio-rs/prost/compare/v0.5.0...v0.6.0)

*PROST!* is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) implementation for the [Rust Language](https://www.rust-lang.org/). `prost` generates simple, idiomatic Rust code from `proto2` and `proto3` files.

`prost` 0.6.0 includes breaking changes:

-   The minimum-supported Rust version (MSRV) is now 1.39.0.
-   The `bytes` public dependency version is now `0.5`.
-   The prost-types `Timestamp` and `Duration` types now impl `TryFrom` for their
    `std::time` equivalents. The old inherent `try_from` methods have been
    removed.
-   Deeply nested messages now fail decoding with an error, instead of potentially
    resulting in a stack overflow. The limit is set to a nesting depth of 100, and
    the limit can be disabled using a new `no-recursion-limit` Cargo feature.

As well as many new (non-breaking) features and improvements:

-   [@&#8203;hanya](https://github.com/hanya) added support for protobuf Group types.
-   [@&#8203;danburkert](https://github.com/danburkert) improved the benchmark suite, including adding support for the
    full set of upstream message encoding and decoding benchmarks.
-   [@&#8203;nrc](https://github.com/nrc) implemented a series of micro-optimizations which result in faster
    message encoding and decoding.
-   [@&#8203;dunmatt](https://github.com/dunmatt) improved the method docs on generated types.
-   [@&#8203;lukaslueg](https://github.com/lukaslueg) removed the dependency on `byteorder`.
-   [@&#8203;parasyte](https://github.com/parasyte) added the `ServiceGenerator::finalize_package`, which is useful for
    advanced service generators.
-   [@&#8203;joelgallant](https://github.com/joelgallant) improved the error message that occurs when attempting to compile
    .proto files without a package specifier.
-   [@&#8203;LucioFranco](https://github.com/LucioFranco) removed the direct dependency of generated types on the `bytes`
    crate, which means applications which use `prost` code generation are no
    longer required to declare a `bytes` dependency.
-   [@&#8203;ErichDonGubler](https://github.com/ErichDonGubler) and [@&#8203;hobofan](https://github.com/hobofan) bumped the `syn`, `quote`, and `proc-macro2` to stable
    versions.
-   [@&#8203;Timmmm](https://github.com/Timmmm) improved `prost-build` so that it no longer writes .rs files when they
    are unchanged, which improves working with tools like `cargo watch` in
    codebases with `prost` code generation.
-   [@&#8203;Hirevo](https://github.com/Hirevo) replaced usage of `failure` with `anyhow`.
-   [@&#8203;danburkert](https://github.com/danburkert) bumped the packaged `protoc` version to 3.11.2.

Many thanks to the generous contributors who have helped out since 0.5.0:

-   Dan Burkert
-   Erich Gubler
-   FujiApple
-   Hanya
-   Jay Oster
-   Joel Gallant
-   koushiro
-   Lucio Franco
-   Luffbee
-   lukaslueg
-   M@ Dunlap
-   Maximilian Goisser
-   Mikhail Zabaluev
-   Nick Cameron
-   Nicolas Polomack
-   Stephan Wolski
-   Tim Hutt

</details>

<details>
<summary>serde-rs/serde</summary>

### [`v1.0.188`](https://github.com/serde-rs/serde/releases/tag/v1.0.188)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.187...v1.0.188)

-   Fix *"failed to parse manifest"* error when building serde using a Cargo version between 1.45 and 1.50 ([#&#8203;2603](https://github.com/serde-rs/serde/issues/2603))

### [`v1.0.187`](https://github.com/serde-rs/serde/releases/tag/v1.0.187)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.186...v1.0.187)

-   Remove support for Emscripten targets on rustc older than 1.40 ([#&#8203;2600](https://github.com/serde-rs/serde/issues/2600))

### [`v1.0.186`](https://github.com/serde-rs/serde/releases/tag/v1.0.186)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.185...v1.0.186)

-   Disallow incompatible versions of `serde_derive` and `serde` in the dependency graph ([#&#8203;2588](https://github.com/serde-rs/serde/issues/2588), thanks [@&#8203;soqb](https://github.com/soqb))

### [`v1.0.185`](https://github.com/serde-rs/serde/releases/tag/v1.0.185)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.184...v1.0.185)

-   Fix error *"cannot move out of `*self` which is behind a shared reference"* deriving Serialize on a non_exhaustive enum ([#&#8203;2591](https://github.com/serde-rs/serde/issues/2591))

### [`v1.0.184`](https://github.com/serde-rs/serde/releases/tag/v1.0.184)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.183...v1.0.184)

-   Restore from-source `serde_derive` build on all platforms — eventually we'd like to use a first-class precompiled macro if such a thing becomes supported by cargo / crates.io

### [`v1.0.183`](https://github.com/serde-rs/serde/releases/tag/v1.0.183)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.182...v1.0.183)

-   Support deserializing `Box<OsStr>` with an equivalent representation as `OsString` ([#&#8203;2556](https://github.com/serde-rs/serde/issues/2556), thanks [@&#8203;DBLouis](https://github.com/DBLouis))

### [`v1.0.182`](https://github.com/serde-rs/serde/releases/tag/v1.0.182)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.181...v1.0.182)

-   Render field aliases in sorted order in error messages ([#&#8203;2458](https://github.com/serde-rs/serde/issues/2458), thanks [@&#8203;Mingun](https://github.com/Mingun))
-   Support `serde(default)` on tuple structs ([#&#8203;2553](https://github.com/serde-rs/serde/issues/2553), thanks [@&#8203;Mingun](https://github.com/Mingun))

### [`v1.0.181`](https://github.com/serde-rs/serde/releases/tag/v1.0.181)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.180...v1.0.181)

-   Make `serde(alias)` work in combination with `flatten` when using in-place deserialization ([#&#8203;2443](https://github.com/serde-rs/serde/issues/2443), thanks [@&#8203;Mingun](https://github.com/Mingun))
-   Improve the representation of adjacently tagged enums in formats where enum tags are serialized by index, as opposed to by string name ([#&#8203;2505](https://github.com/serde-rs/serde/issues/2505), [#&#8203;2496](https://github.com/serde-rs/serde/issues/2496), thanks [@&#8203;Baptistemontan](https://github.com/Baptistemontan))

### [`v1.0.180`](https://github.com/serde-rs/serde/releases/tag/v1.0.180)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.179...v1.0.180)

-   Update to 2018 edition

### [`v1.0.179`](https://github.com/serde-rs/serde/releases/tag/v1.0.179)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.178...v1.0.179)

-   Support serialization of tuple variants inside a flattened field ([#&#8203;2448](https://github.com/serde-rs/serde/issues/2448), thanks [@&#8203;Mingun](https://github.com/Mingun))

### [`v1.0.178`](https://github.com/serde-rs/serde/releases/tag/v1.0.178)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.177...v1.0.178)

-   Fix build error when using serde with "std" feature turned off and "unstable" feature turned on ([#&#8203;2541](https://github.com/serde-rs/serde/issues/2541))

### [`v1.0.177`](https://github.com/serde-rs/serde/releases/tag/v1.0.177)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.176...v1.0.177)

-   Add `serde(rename_all_fields = "...")` attribute to apply a `rename_all` on every struct variant of an enum ([#&#8203;1695](https://github.com/serde-rs/serde/issues/1695), thanks [@&#8203;jplatte](https://github.com/jplatte))
-   Improve diagnostics for attribute parse errors ([#&#8203;2536](https://github.com/serde-rs/serde/issues/2536), thanks [@&#8203;jplatte](https://github.com/jplatte))

### [`v1.0.176`](https://github.com/serde-rs/serde/releases/tag/v1.0.176)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.175...v1.0.176)

-   Allow tag field of an internally tagged enum to have same name as a field inside a skipped struct variant ([#&#8203;2266](https://github.com/serde-rs/serde/issues/2266), thanks [@&#8203;flisky](https://github.com/flisky))

### [`v1.0.175`](https://github.com/serde-rs/serde/releases/tag/v1.0.175)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.174...v1.0.175)

-   Restore missing LICENSE files in serde_derive crate ([#&#8203;2527](https://github.com/serde-rs/serde/issues/2527), thanks [@&#8203;ankane](https://github.com/ankane))

### [`v1.0.174`](https://github.com/serde-rs/serde/releases/tag/v1.0.174)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.173...v1.0.174)

-   Documentation improvements

### [`v1.0.173`](https://github.com/serde-rs/serde/releases/tag/v1.0.173)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.172...v1.0.173)

-   Fix missing trait implementations when using serde derive macro on a macro-generated data structure, such as via the `bitflags` crate ([#&#8203;2516](https://github.com/serde-rs/serde/issues/2516))

### [`v1.0.172`](https://github.com/serde-rs/serde/releases/tag/v1.0.172)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.171...v1.0.172)

-   Experiment with precompiling the serde_derive macros to reduce build time ([#&#8203;2514](https://github.com/serde-rs/serde/issues/2514))

### [`v1.0.171`](https://github.com/serde-rs/serde/releases/tag/v1.0.171)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.170...v1.0.171)

-   Support `derive(Deserialize)` on unit structs that have const generics ([#&#8203;2500](https://github.com/serde-rs/serde/issues/2500), thanks [@&#8203;Baptistemontan](https://github.com/Baptistemontan))

### [`v1.0.170`](https://github.com/serde-rs/serde/releases/tag/v1.0.170)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.169...v1.0.170)

-   Produce error message on suffixed string literals inside serde attributes ([#&#8203;2242](https://github.com/serde-rs/serde/issues/2242))
-   Support single identifier as unbraced default value for const generic parameter ([#&#8203;2449](https://github.com/serde-rs/serde/issues/2449))

### [`v1.0.169`](https://github.com/serde-rs/serde/releases/tag/v1.0.169)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.168...v1.0.169)

-   Add Deserializer::deserialize_identifier support for adjacently tagged enums ([#&#8203;2475](https://github.com/serde-rs/serde/issues/2475), thanks [@&#8203;Baptistemontan](https://github.com/Baptistemontan))
-   Fix unused_braces lint in generated Deserialize impl that uses braced const generic expressions ([#&#8203;2414](https://github.com/serde-rs/serde/issues/2414))

### [`v1.0.168`](https://github.com/serde-rs/serde/releases/tag/v1.0.168)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.167...v1.0.168)

-   Allow `serde::de::IgnoredAny` to be the type for a `serde(flatten)` field ([#&#8203;2436](https://github.com/serde-rs/serde/issues/2436), thanks [@&#8203;Mingun](https://github.com/Mingun))
-   Allow larger preallocated capacity for smaller elements ([#&#8203;2494](https://github.com/serde-rs/serde/issues/2494))

### [`v1.0.167`](https://github.com/serde-rs/serde/releases/tag/v1.0.167)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.166...v1.0.167)

-   Add serialize and deserialize impls for `RangeFrom` and `RangeTo` ([#&#8203;2471](https://github.com/serde-rs/serde/issues/2471), thanks [@&#8203;tbu-](https://github.com/tbu-))

### [`v1.0.166`](https://github.com/serde-rs/serde/releases/tag/v1.0.166)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.165...v1.0.166)

-   Add `no-alloc` category to crates.io metadata

### [`v1.0.165`](https://github.com/serde-rs/serde/releases/tag/v1.0.165)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.164...v1.0.165)

-   Fix incorrect count of fields passed to tuple deserialization methods when using `serde(skip_deserializing)` attributes ([#&#8203;2466](https://github.com/serde-rs/serde/issues/2466), thanks [@&#8203;Mingun](https://github.com/Mingun))
-   Fix `-Zminimal-versions` build

### [`v1.0.164`](https://github.com/serde-rs/serde/releases/tag/v1.0.164)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.163...v1.0.164)

-   Allowed enum variants to be individually marked as untagged ([#&#8203;2403](https://github.com/serde-rs/serde/issues/2403), thanks [@&#8203;dewert99](https://github.com/dewert99))

### [`v1.0.163`](https://github.com/serde-rs/serde/releases/tag/v1.0.163)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.162...v1.0.163)

-   Eliminate build script from serde_derive crate to slightly reduce build time ([#&#8203;2442](https://github.com/serde-rs/serde/issues/2442), thanks [@&#8203;taiki-e](https://github.com/taiki-e))

### [`v1.0.162`](https://github.com/serde-rs/serde/releases/tag/v1.0.162)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.161...v1.0.162)

-   Support deserializing flattened adjacently tagged enums from data formats which represent fields as bytes, such as the `csv` crate ([#&#8203;2377](https://github.com/serde-rs/serde/issues/2377), thanks [@&#8203;mfro](https://github.com/mfro))

    ```rust
    #[derive(Deserialize)]
    pub struct Record {
        common: u64,
        #[serde(flatten)]
        kind: Kind,
    }

    #[derive(Deserialize)]
    #[serde(tag = "kind", content = "parameter", rename_all = "lowercase")]
    enum Kind {
        Foo(u64),
        Bar(bool),
    }
    ```

    ```csv
    common,kind,parameter
    1,foo,42
    2,bar,true
    ```

### [`v1.0.161`](https://github.com/serde-rs/serde/releases/tag/v1.0.161)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.160...v1.0.161)

-   Improve error messages produced by serde_test on test failure ([#&#8203;2435](https://github.com/serde-rs/serde/issues/2435), thanks [@&#8203;Mingun](https://github.com/Mingun))

### [`v1.0.160`](https://github.com/serde-rs/serde/releases/tag/v1.0.160)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.159...v1.0.160)

-   Make derived serializer/deserializer internals `doc(hidden)` ([#&#8203;2426](https://github.com/serde-rs/serde/issues/2426), thanks [@&#8203;compiler-errors](https://github.com/compiler-errors))

### [`v1.0.159`](https://github.com/serde-rs/serde/releases/tag/v1.0.159)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.158...v1.0.159)

-   Accept empty #\[serde()] attribute ([#&#8203;2422](https://github.com/serde-rs/serde/issues/2422))

### [`v1.0.158`](https://github.com/serde-rs/serde/releases/tag/v1.0.158)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.157...v1.0.158)

-   Fix *"expected serde crate attribute to be a string"* error when using macro_rules metavariable inside of serde attribute: `#[serde(crate = $serde_path)]` ([#&#8203;2409](https://github.com/serde-rs/serde/issues/2409))

### [`v1.0.157`](https://github.com/serde-rs/serde/releases/tag/v1.0.157)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.156...v1.0.157)

-   Update syn dependency to 2.x

### [`v1.0.156`](https://github.com/serde-rs/serde/releases/tag/v1.0.156)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.155...v1.0.156)

-   Documentation improvements

### [`v1.0.155`](https://github.com/serde-rs/serde/releases/tag/v1.0.155)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.154...v1.0.155)

-   Support `Serialize` and `Deserialize` impls for `core::ffi::CStr` and `alloc::ffi::CString` without "std" feature ([#&#8203;2374](https://github.com/serde-rs/serde/issues/2374), thanks [@&#8203;safarir](https://github.com/safarir))

### [`v1.0.154`](https://github.com/serde-rs/serde/releases/tag/v1.0.154)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.153...v1.0.154)

-   Fix "undeclared lifetime" error in generated code when deriving Deserialize for an enum with both `flatten` and `'static` fields ([#&#8203;2383](https://github.com/serde-rs/serde/issues/2383), thanks [@&#8203;Mingun](https://github.com/Mingun))

### [`v1.0.153`](https://github.com/serde-rs/serde/releases/tag/v1.0.153)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.152...v1.0.153)

-   Support `serde(alias = "…")` attribute used inside of flattened struct ([#&#8203;2387](https://github.com/serde-rs/serde/issues/2387), thanks [@&#8203;bebecue](https://github.com/bebecue))

### [`v1.0.152`](https://github.com/serde-rs/serde/releases/tag/v1.0.152)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.151...v1.0.152)

-   Documentation improvements

### [`v1.0.151`](https://github.com/serde-rs/serde/releases/tag/v1.0.151)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.150...v1.0.151)

-   Update `serde::`{`ser`,`de`}`::StdError` to re-export `core::error::Error` when serde is built with `feature="std"` **off** and `feature="unstable"` **on** ([#&#8203;2344](https://github.com/serde-rs/serde/issues/2344))

### [`v1.0.150`](https://github.com/serde-rs/serde/releases/tag/v1.0.150)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.149...v1.0.150)

-   Relax some trait bounds from the `Serialize` impl of `HashMap` and `BTreeMap` ([#&#8203;2334](https://github.com/serde-rs/serde/issues/2334))
-   Enable `Serialize` and `Deserialize` impls of `std::sync::atomic` types on more platforms ([#&#8203;2337](https://github.com/serde-rs/serde/issues/2337), thanks [@&#8203;badboy](https://github.com/badboy))

### [`v1.0.149`](https://github.com/serde-rs/serde/releases/tag/v1.0.149)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.148...v1.0.149)

-   Relax some trait bounds from the `Serialize` impl of `BinaryHeap`, `BTreeSet`, and `HashSet` ([#&#8203;2333](https://github.com/serde-rs/serde/issues/2333), thanks [@&#8203;jonasbb](https://github.com/jonasbb))

### [`v1.0.148`](https://github.com/serde-rs/serde/releases/tag/v1.0.148)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.147...v1.0.148)

-   Support `remote` derive for generic types that have private fields ([#&#8203;2327](https://github.com/serde-rs/serde/issues/2327))

### [`v1.0.147`](https://github.com/serde-rs/serde/releases/tag/v1.0.147)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.146...v1.0.147)

-   Add `serde::de::value::EnumAccessDeserializer` which transforms an `EnumAccess` into a `Deserializer` ([#&#8203;2305](https://github.com/serde-rs/serde/issues/2305))

### [`v1.0.146`](https://github.com/serde-rs/serde/releases/tag/v1.0.146)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.145...v1.0.146)

-   Allow internally tagged newtype variant to contain unit ([#&#8203;2303](https://github.com/serde-rs/serde/issues/2303), thanks [@&#8203;tage64](https://github.com/tage64))

### [`v1.0.145`](https://github.com/serde-rs/serde/releases/tag/v1.0.145)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.144...v1.0.145)

-   Allow RefCell\<T>, Mutex\<T>, and RwLock\<T> to be serialized regardless of whether T is `Sized` ([#&#8203;2282](https://github.com/serde-rs/serde/issues/2282), thanks [@&#8203;ChayimFriedman2](https://github.com/ChayimFriedman2))

### [`v1.0.144`](https://github.com/serde-rs/serde/releases/tag/v1.0.144)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.143...v1.0.144)

-   Change atomic ordering used by Serialize impl of atomic types to match ordering used by Debug impl of those same types ([#&#8203;2263](https://github.com/serde-rs/serde/issues/2263), thanks [@&#8203;taiki-e](https://github.com/taiki-e))

### [`v1.0.143`](https://github.com/serde-rs/serde/releases/tag/v1.0.143)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.142...v1.0.143)

-   Invert build.rs cfgs in serde_test to produce the most modern configuration in the default case ([#&#8203;2253](https://github.com/serde-rs/serde/issues/2253), thanks [@&#8203;taiki-e](https://github.com/taiki-e))

### [`v1.0.142`](https://github.com/serde-rs/serde/releases/tag/v1.0.142)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.141...v1.0.142)

-   Add keywords to crates.io metadata

### [`v1.0.141`](https://github.com/serde-rs/serde/releases/tag/v1.0.141)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.140...v1.0.141)

-   Add `no-std` category to crates.io metadata

### [`v1.0.140`](https://github.com/serde-rs/serde/releases/tag/v1.0.140)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.139...v1.0.140)

-   Invert serde_derive cfgs to convenience non-Cargo builds on a modern toolchain ([#&#8203;2251](https://github.com/serde-rs/serde/issues/2251), thanks [@&#8203;taiki-e](https://github.com/taiki-e))

### [`v1.0.139`](https://github.com/serde-rs/serde/releases/tag/v1.0.139)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.138...v1.0.139)

-   Add `new` constructor function for all `IntoDeserializer` impls ([#&#8203;2246](https://github.com/serde-rs/serde/issues/2246))

### [`v1.0.138`](https://github.com/serde-rs/serde/releases/tag/v1.0.138)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.137...v1.0.138)

-   Documentation improvements

### [`v1.0.137`](https://github.com/serde-rs/serde/releases/tag/v1.0.137)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.136...v1.0.137)

-   Update documentation links to some data formats whose repos have moved ([#&#8203;2201](https://github.com/serde-rs/serde/issues/2201), thanks [@&#8203;atouchet](https://github.com/atouchet))
-   Fix declared `rust-version` of serde and serde_test ([#&#8203;2168](https://github.com/serde-rs/serde/issues/2168))

### [`v1.0.136`](https://github.com/serde-rs/serde/releases/tag/v1.0.136)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.135...v1.0.136)

-   Improve default error message when `Visitor` fails to deserialize a u128 or i128 ([#&#8203;2167](https://github.com/serde-rs/serde/issues/2167))

### [`v1.0.135`](https://github.com/serde-rs/serde/releases/tag/v1.0.135)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.134...v1.0.135)

-   Update discord channels listed in readme

### [`v1.0.134`](https://github.com/serde-rs/serde/releases/tag/v1.0.134)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.133...v1.0.134)

-   Improve error messages on deserializing NonZero integers from a 0 value ([#&#8203;2158](https://github.com/serde-rs/serde/issues/2158))

### [`v1.0.133`](https://github.com/serde-rs/serde/releases/tag/v1.0.133)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.132...v1.0.133)

-   Optimize deserialization of data structures that contain recursive use of `flatten` fields or `tag` or `untagged` enums ([#&#8203;2148](https://github.com/serde-rs/serde/issues/2148))

### [`v1.0.132`](https://github.com/serde-rs/serde/releases/tag/v1.0.132)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.131...v1.0.132)

-   Enable Serialize and Deserialize impls for `std::sync::atomic::{AtomicI64, AtomicU64}` on riscv64 arch ([#&#8203;2141](https://github.com/serde-rs/serde/issues/2141), thanks [@&#8203;Avimitin](https://github.com/Avimitin))

### [`v1.0.131`](https://github.com/serde-rs/serde/releases/tag/v1.0.131)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.130...v1.0.131)

-   Avoid `unused_results` being triggered in generated code for adjacently tagged enum ([#&#8203;2116](https://github.com/serde-rs/serde/issues/2116), thanks [@&#8203;tyranron](https://github.com/tyranron))

### [`v1.0.130`](https://github.com/serde-rs/serde/releases/tag/v1.0.130)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.129...v1.0.130)

-   Provide `MapAccess` and `SeqAccess` impl for reference to a dynamically sized existing impl ([#&#8203;2081](https://github.com/serde-rs/serde/issues/2081))

### [`v1.0.129`](https://github.com/serde-rs/serde/releases/tag/v1.0.129)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.128...v1.0.129)

-   Support deserialization of remote structs that used packed repr ([#&#8203;2078](https://github.com/serde-rs/serde/issues/2078), [#&#8203;2079](https://github.com/serde-rs/serde/issues/2079), [#&#8203;2080](https://github.com/serde-rs/serde/issues/2080))

### [`v1.0.128`](https://github.com/serde-rs/serde/releases/tag/v1.0.128)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.127...v1.0.128)

-   Enable 128-bit integers on emscripten in Rust 1.40+ ([#&#8203;2076](https://github.com/serde-rs/serde/issues/2076), thanks [@&#8203;Manishearth](https://github.com/Manishearth))

### [`v1.0.127`](https://github.com/serde-rs/serde/releases/tag/v1.0.127)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.126...v1.0.127)

-   Resolve warning in rustc nightly-2021-07-31+ compiling serde_test

### [`v1.0.126`](https://github.com/serde-rs/serde/releases/tag/v1.0.126)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.125...v1.0.126)

-   Resolve conflict with `forbid(future_incompatible)` lint setting in generated code ([#&#8203;2026](https://github.com/serde-rs/serde/issues/2026), thanks [@&#8203;hyd-dev](https://github.com/hyd-dev))

### [`v1.0.125`](https://github.com/serde-rs/serde/releases/tag/v1.0.125)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.124...v1.0.125)

-   Improve performance of serializing `Ipv4Addr` ([#&#8203;2001](https://github.com/serde-rs/serde/issues/2001), thanks [@&#8203;saethlin](https://github.com/saethlin))

### [`v1.0.124`](https://github.com/serde-rs/serde/releases/tag/v1.0.124)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.123...v1.0.124)

-   Fix possible panic deserializing invalid data as `SystemTime` ([#&#8203;1997](https://github.com/serde-rs/serde/issues/1997), thanks [@&#8203;cyang1](https://github.com/cyang1))

### [`v1.0.123`](https://github.com/serde-rs/serde/releases/tag/v1.0.123)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.122...v1.0.123)

-   Support `Self` keywords in fields of types that derive Deserialize ([#&#8203;1830](https://github.com/serde-rs/serde/issues/1830), thanks [@&#8203;taiki-e](https://github.com/taiki-e))
-   Allow floats to be deserialized from ints in tagged unions ([#&#8203;1842](https://github.com/serde-rs/serde/issues/1842), thanks [@&#8203;Timmmm](https://github.com/Timmmm))
-   Support `Self` inside fields that use serialize_with ([#&#8203;1970](https://github.com/serde-rs/serde/issues/1970))

### [`v1.0.122`](https://github.com/serde-rs/serde/releases/tag/v1.0.122)

[Compare Source](https://github.com/serde-rs/serde/compare/v1.0.121...v1.0.122)

-   Add IntoDeserializer impl for &\[u8] ([#&#8203;1898](https://github.com/serde-rs/serde/issues/1898), thanks [@&#8203;Mingun](https://github.com/Mingun))

-   Handle unrecognized numeric field keys during deserialization of a field_identifier, equivalently to string field keys ([#&#8203;1914](https://github.com/serde-rs/serde/issues/1914), thanks [@&#8203;Mingun](https://github.com/Mingun))

-   Add attribute to override default deserialization failure expectation message ([#&#8203;1916](https://github.com/serde-rs/serde/issues/1916), thanks [@&#8203;Mingun](https://github.com/Mingun))

    ```rust
    #[derive(Deserialize)]
    #[serde(untagged, expecting = "single version or array of versions")]
    struct VersionSpec {
        One(Version),
        Many(Vec<Version>),
    }
    ```

-   Improve `serde_test` handling of map entries and error message construction ([#&#8203;1918](https://github.com/serde-rs/serde/issues/1918), thanks [@&#8203;Mingun](https://github.com/Mingun))

-   Produce more accurate location information on test failures from `serde_test` crate ([#&#8203;1920](https://github.com/serde-rs/serde/issues/1920), thanks [@&#8203;Mingun](https://github.com/Mingun))

-   Improve diagnostic on failure to parse a `rename_all` attribute ([#&#8203;1960](https://github.com/serde-rs/serde/issues/1960), [#&#8203;1961](https://github.com/serde-rs/serde/issues/1961))

-   Eliminate unnecessary trait bounds on some value Deserializer impls ([#&#8203;1963](https://github.com/serde-rs/serde/issues/1963))

### [`v1.0.121`](https://github.com/serd…
@jost-s
Copy link

jost-s commented Nov 10, 2023

Since this is a breaking change, why was it released as a patch instead of a minor version?

v1.0.180

In my case, an enum

#[derive(Serialize, Deserialize, Debug)]
#serde(tag = "type", content = "data")]
enum Message {
  A(i32),
}

let m = Message::A(100);

was rmp_serded to

[130, 164, 116, 121, 112, 101, 161, 65, 164, 100, 97, 116, 97, 100]

which the JS msgpack package converts to JSON as

{
  "type": "A",
  "data": 100
}

with serde v1.0.180.

v1.0.181

Same enum and attributes, rmp_serde spits out

[130, 164, 116, 121, 112, 101, 129, 161, 65, 192, 164, 100, 97, 116, 97, 100]

and JS msgpack converts to

{
  "type": {
    "A": null
  },
  "data": 100
}

serde_json

What is further confusing this is that converting this to JSON with serde_json results in

{\"type\":\"A\",\"data\":100}

regardless of the serde version.

rmp_serde

With serde v1.0.180 the result of rmp_serde::to_vec_named(&m) is

[130, 164, 116, 121, 112, 101, 129, 0, 192, 164, 100, 97, 116, 97, 129, 165, 112, 97, 114, 97, 109, 100]

JS msgpack decodes that to JSON like so

{
  "type": "request",
  "data": {
    "param": 100
  }
}

And with serde v1.0.181 the msgpack encoded byte array is

[130, 164, 116, 121, 112, 101, 129, 0, 192, 164, 100, 97, 116, 97, 129, 165, 112, 97, 114, 97, 109, 100]

which JS msgpack decodes to

{
  "type": {
    "0": null
  },
  "data": {
    "param": 100
  }
}

Can you please shed light on this? @dtolnay @Baptistemontan

RanbirK pushed a commit to RanbirK/avro that referenced this pull request May 13, 2024
* Bump serde from 1.0.180 to 1.0.183 in /lang/rust

Bumps [serde](https://github.com/serde-rs/serde) from 1.0.180 to 1.0.183.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](serde-rs/serde@v1.0.180...v1.0.183)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update the Serde impl after serde-rs/serde#2505

Also see serde-rs/serde#2496

Signed-off-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>
martin-g added a commit to apache/avro-rs that referenced this pull request Sep 23, 2024
* Bump serde from 1.0.180 to 1.0.183 in /lang/rust

Bumps [serde](https://github.com/serde-rs/serde) from 1.0.180 to 1.0.183.
- [Release notes](https://github.com/serde-rs/serde/releases)
- [Commits](serde-rs/serde@v1.0.180...v1.0.183)

---
updated-dependencies:
- dependency-name: serde
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update the Serde impl after serde-rs/serde#2505

Also see serde-rs/serde#2496

Signed-off-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

Revisit the representation of variant id for adjacently tagged enums
4 participants