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

Tracking Issue for error_generic_member_access #99301

Open
yaahc opened this issue Jul 15, 2022 · 19 comments
Open

Tracking Issue for error_generic_member_access #99301

yaahc opened this issue Jul 15, 2022 · 19 comments
Assignees
Labels
C-tracking-issue Category: An issue tracking the progress of sth. like the implementation of an RFC T-libs-api Relevant to the library API team, which will review and decide on the PR/issue.

Comments

@yaahc
Copy link
Member

yaahc commented Jul 15, 2022

Feature gate: #![feature(error_generic_member_access)]

This is a tracking issue for the generic member access API on the error trait, which generalizes the pattern of fn source(&self) -> Option<&dyn Error> and fn backtrace(&self) -> Option<&Backtrace> into fn request_ref::<T>(&self) -> Option<&T>

Public API

// std::error

pub trait Error: Debug + Display {
    // existing API unchanged

    fn provide<'a>(&'a self, req: &mut Demand<'a>) {}
}

impl dyn Error + Send + Sync + 'static { // and all combinations of send/sync
    pub fn request_ref<T: ?Sized + 'static>(&self) -> Option<&T> {
        core::any::request_ref(self)
    }

    pub fn request_value<T: 'static>(&self) -> Option<T> {
        core::any::request_value(self)
    }
}

Steps / History

Now tracked by @waynr in #99301 (comment)

Unresolved Questions

  • None yet.
@yaahc yaahc added T-libs-api Relevant to the library API team, which will review and decide on the PR/issue. C-tracking-issue Category: An issue tracking the progress of sth. like the implementation of an RFC labels Jul 15, 2022
dbanty referenced this issue in knope-dev/knope Sep 4, 2022
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [thiserror](https://togithub.com/dtolnay/thiserror) | dependencies | patch | `1.0.32` -> `1.0.33` |

---

### Release Notes

<details>
<summary>dtolnay/thiserror</summary>

### [`v1.0.33`](https://togithub.com/dtolnay/thiserror/releases/tag/1.0.33)

[Compare Source](https://togithub.com/dtolnay/thiserror/compare/1.0.32...1.0.33)

-   Expose backtraces via the new "generic member access" API on the Error trait ([https://github.com/rust-lang/rust/issues/99301](https://togithub.com/rust-lang/rust/issues/99301), [https://github.com/rust-lang/rust/issues/96024](https://togithub.com/rust-lang/rust/issues/96024))

</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, click this checkbox.

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/knope-dev/knope).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4xODQuMiIsInVwZGF0ZWRJblZlciI6IjMyLjE4NC4yIn0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@dtolnay
Copy link
Member

dtolnay commented Sep 5, 2022

Hello from dtolnay/thiserror#185. I noticed it can be problematic for macros that Provider and Error both have a method named provide. I know this has been the case for other traits (Display and Debug both have a fmt method, for example) but one thing that makes the situation worse for provide is that we're commonly forced to rely on deref in order to call it, so fully-qualified method call syntax is not suitable to resolve the ambiguity:

  • In the case of Display, macros can write core::fmt::Display::fmt(&$thing, formatter) and that will always work, because even if $thing is something like Box<dyn Display>, there is an impl<T> Display for Box<T> where T: Display + ?Sized which makes it work.

  • However in the case of Error, writing core::error::Error::provide(&$thing, demand) is less good than $thing.provide(demand) because there is no impl<E> Error for Box<E> where E: Error + ?Sized. If $thing is Box<dyn Error + Send + Sync + 'static>, or anyhow::Error, these things rely on the deref done implicitly by .provide(demand) in order to deref to dyn Error + Send + Sync + 'static, which calling fully qualified core::error::Error::provide will not do.

  • The situation gets worse as other traits in the ecosystem follow the lead of Error and possibly add their own provide method. Maybe it's not so common that Provider and Error would be both in scope at the same time, but are we confident that Error and arbitrary other ecosystem trait won't be?

Two proposals:

  1. There should be impl Provider for Box<dyn Error + …> in the standard library. This makes core::any::Provider::provide(&$thing, demand) accommodate more cases, but still not as good as having a deref.

  2. Is there someone who might be interested in pursuing a "fully qualified method call but with deref/autoref" RFC? The syntax thing.core::any::Provider::provide(demand) has been suggested for this in the past, and would eliminate the difficulty for macros that want a deref or autoref but also need to be robust to multiple traits having the same method name.

@JonasJebing
Copy link

JonasJebing commented Oct 23, 2022

I agree, that

a "fully qualified method call but with deref/autoref" RFC

would be great.
An immediate remedy would also be to rename Error::provide.
The error_generic_member_access RFC and the dyno/provide_any RFC were already using Error::provide_context instead of Error::provide in their examples.
I'd gladly create a PR to change the name if there are no objections.

bors bot referenced this issue in stackabletech/operator-rs Nov 4, 2022
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [Swatinem/rust-cache](https://togithub.com/Swatinem/rust-cache) | action | patch | `v2.0.0` -> `v2.0.2` |
| [clap](https://togithub.com/clap-rs/clap) | dependencies | patch | `3.2.17` -> `3.2.23` |
| [const_format](https://togithub.com/rodrimati1992/const_format_crates) | dependencies | patch | `0.2.26` -> `0.2.30` |
| [darling](https://togithub.com/TedDriggs/darling) | dependencies | patch | `0.14.1` -> `0.14.2` |
| [futures](https://rust-lang.github.io/futures-rs) ([source](https://togithub.com/rust-lang/futures-rs)) | dependencies | patch | `0.3.23` -> `0.3.25` |
| [proc-macro2](https://togithub.com/dtolnay/proc-macro2) | dependencies | patch | `1.0.43` -> `1.0.47` |
| [serde](https://serde.rs) ([source](https://togithub.com/serde-rs/serde)) | dependencies | patch | `1.0.144` -> `1.0.147` |
| [serde_json](https://togithub.com/serde-rs/json) | dependencies | patch | `1.0.85` -> `1.0.87` |
| [serde_yaml](https://togithub.com/dtolnay/serde-yaml) | dependencies | patch | `0.9.10` -> `0.9.14` |
| [snafu](https://togithub.com/shepmaster/snafu) | dependencies | patch | `0.7.1` -> `0.7.3` |
| [syn](https://togithub.com/dtolnay/syn) | dependencies | patch | `1.0.99` -> `1.0.103` |
| [thiserror](https://togithub.com/dtolnay/thiserror) | dependencies | patch | `1.0.32` -> `1.0.37` |
| [tokio](https://tokio.rs) ([source](https://togithub.com/tokio-rs/tokio)) | dependencies | patch | `1.21.1` -> `1.21.2` |
| [tracing](https://tokio.rs) ([source](https://togithub.com/tokio-rs/tracing)) | dependencies | patch | `0.1.36` -> `0.1.37` |
| [tracing-subscriber](https://tokio.rs) ([source](https://togithub.com/tokio-rs/tracing)) | dependencies | patch | `0.3.15` -> `0.3.16` |

---

### Release Notes

<details>
<summary>Swatinem/rust-cache</summary>

### [`v2.0.2`](https://togithub.com/Swatinem/rust-cache/releases/tag/v2.0.2)

[Compare Source](https://togithub.com/Swatinem/rust-cache/compare/v2.0.1...v2.0.2)

-   Avoid calling cargo metadata on pre-cleanup.

### [`v2.0.1`](https://togithub.com/Swatinem/rust-cache/releases/tag/v2.0.1)

[Compare Source](https://togithub.com/Swatinem/rust-cache/compare/v2.0.0...v2.0.1)

-   Primarily just updating dependencies to fix GitHub deprecation notices.

</details>

<details>
<summary>clap-rs/clap</summary>

### [`v3.2.23`](https://togithub.com/clap-rs/clap/releases/tag/v3.2.23)

[Compare Source](https://togithub.com/clap-rs/clap/compare/v3.2.22...v3.2.23)

#### \[3.2.23] - 2022-10-24

##### Fixes

-   Upgrade to `textwrap` 0.16

### [`v3.2.22`](https://togithub.com/clap-rs/clap/releases/tag/v3.2.22)

[Compare Source](https://togithub.com/clap-rs/clap/compare/v3.2.21...v3.2.22)

##### \[3.2.22] - 2022-09-16

##### Fixes

-   Unify dependencies on `terminal_size` to the 0.2 release

### [`v3.2.21`](https://togithub.com/clap-rs/clap/releases/tag/v3.2.21)

[Compare Source](https://togithub.com/clap-rs/clap/compare/v3.2.20...v3.2.21)

#### \[3.2.21] - 2022-09-12

##### Features

-   `TypedValueParser::map` to allow reusing existing value parsers for other purposes

### [`v3.2.20`](https://togithub.com/clap-rs/clap/releases/tag/v3.2.20)

[Compare Source](https://togithub.com/clap-rs/clap/compare/v3.2.19...v3.2.20)

#### \[3.2.20] - 2022-09-02

##### Features

-   `ArgMatches::get_count` help for `ArgAction::Count`
-   `ArgMatches::get_flag` help for `ArgAction::SetTrue` / `ArgAction::SetFalse`

### [`v3.2.19`](https://togithub.com/clap-rs/clap/releases/tag/v3.2.19)

[Compare Source](https://togithub.com/clap-rs/clap/compare/v3.2.18...v3.2.19)

#### \[3.2.19] - 2022-08-30

##### Fixes

-   *(help)* Ensure required arguments for parent commands aren't shown in their subcommands when using `args_conflicts_with_subcommand`

### [`v3.2.18`](https://togithub.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#&#8203;3218---2022-08-29)

[Compare Source](https://togithub.com/clap-rs/clap/compare/v3.2.17...v3.2.18)

##### Fixes

-   *(help)* `Command::print_help` now respects `Command::colored_help`
-   *(derive)* Improved error messages

</details>

<details>
<summary>rodrimati1992/const_format_crates</summary>

### [`v0.2.29`](https://togithub.com/rodrimati1992/const_format_crates/blob/HEAD/Changelog.md#&#8203;0229)

Added lowercase hexadecimal formatting support.

Breaking: to add lowercase hexadecimal formatting, this crate changed the uppercase hexadecimal formatter from `{:x}` to `{:X}`

### [`v0.2.27`](https://togithub.com/rodrimati1992/const_format_crates/blob/HEAD/Changelog.md#&#8203;0227)

Replacing existing features with these:

-   `"rust_1_64"`: superceeding the soft-deprecated `"more_str_macros"` feature.
-   `"rust_1_51"`: superceeding the soft-deprecated `"const_generics"` feature.
    The new features are enabled by the feature they superceede.

Now the `"fmt"` feature enables the `"rust_1_64"` feature.

</details>

<details>
<summary>TedDriggs/darling</summary>

### [`v0.14.2`](https://togithub.com/TedDriggs/darling/blob/HEAD/CHANGELOG.md#v0142-October-26-2022)

[Compare Source](https://togithub.com/TedDriggs/darling/compare/v0.14.1...v0.14.2)

-   Derived impls of `FromMeta` will now error on literals, rather than silently ignoring them. [#&#8203;193](https://togithub.com/TedDriggs/darling/pull/193)
-   Don't include property paths in compile errors when spans are available. [#&#8203;203](https://togithub.com/TedDriggs/darling/pull/203)

</details>

<details>
<summary>rust-lang/futures-rs</summary>

### [`v0.3.25`](https://togithub.com/rust-lang/futures-rs/blob/HEAD/CHANGELOG.md#&#8203;0325---2022-10-20)

[Compare Source](https://togithub.com/rust-lang/futures-rs/compare/0.3.24...0.3.25)

-   Fix soundness issue in `join!` and `try_join!` macros ([#&#8203;2649](https://togithub.com/rust-lang/futures-rs/issues/2649))
-   Implement `Clone` for `sink::Drain` ([#&#8203;2650](https://togithub.com/rust-lang/futures-rs/issues/2650))

### [`v0.3.24`](https://togithub.com/rust-lang/futures-rs/blob/HEAD/CHANGELOG.md#&#8203;0324---2022-08-29)

[Compare Source](https://togithub.com/rust-lang/futures-rs/compare/0.3.23...0.3.24)

-   Fix incorrect termination of `select_with_strategy` streams ([#&#8203;2635](https://togithub.com/rust-lang/futures-rs/issues/2635))

</details>

<details>
<summary>dtolnay/proc-macro2</summary>

### [`v1.0.47`](https://togithub.com/dtolnay/proc-macro2/releases/tag/1.0.47)

[Compare Source](https://togithub.com/dtolnay/proc-macro2/compare/1.0.46...1.0.47)

-   Fix integer overflow when nesting depth of nested comments exceeds 4 billion ([#&#8203;357](https://togithub.com/dtolnay/proc-macro2/issues/357))

### [`v1.0.46`](https://togithub.com/dtolnay/proc-macro2/releases/tag/1.0.46)

[Compare Source](https://togithub.com/dtolnay/proc-macro2/compare/1.0.45...1.0.46)

-   Make proc_macro2::TokenStream's `FromStr` impl consistent with proc_macro::TokenStream's on strings that begin with a byte order mark `\u{feff}` ([#&#8203;353](https://togithub.com/dtolnay/proc-macro2/issues/353))

### [`v1.0.45`](https://togithub.com/dtolnay/proc-macro2/releases/tag/1.0.45)

[Compare Source](https://togithub.com/dtolnay/proc-macro2/compare/1.0.44...1.0.45)

-   Fix panic on parsing disallowed raw identifiers such as `r#self` ([#&#8203;351](https://togithub.com/dtolnay/proc-macro2/issues/351))

### [`v1.0.44`](https://togithub.com/dtolnay/proc-macro2/releases/tag/1.0.44)

[Compare Source](https://togithub.com/dtolnay/proc-macro2/compare/1.0.43...1.0.44)

-   Expose `span.before()` and `span.after()` to access an empty `Span` located immediately before or after the input span ([#&#8203;348](https://togithub.com/dtolnay/proc-macro2/issues/348), upstream tracking issue: [https://github.com/rust-lang/rust/issues/87552](https://togithub.com/rust-lang/rust/issues/87552))

</details>

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

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

[Compare Source](https://togithub.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://togithub.com/serde-rs/serde/issues/2305))

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

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

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

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

[Compare Source](https://togithub.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://togithub.com/serde-rs/serde/issues/2282), thanks [@&#8203;ChayimFriedman2](https://togithub.com/ChayimFriedman2))

</details>

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

### [`v1.0.87`](https://togithub.com/serde-rs/json/releases/tag/v1.0.87)

[Compare Source](https://togithub.com/serde-rs/json/compare/v1.0.86...v1.0.87)

-   Add `write_i128` and `write_u128` methods to `serde_json::Formatter` to control the formatting of 128-bit integers ([#&#8203;940](https://togithub.com/serde-rs/json/issues/940), thanks [@&#8203;Lucretiel](https://togithub.com/Lucretiel))

### [`v1.0.86`](https://togithub.com/serde-rs/json/releases/tag/v1.0.86)

[Compare Source](https://togithub.com/serde-rs/json/compare/v1.0.85...v1.0.86)

-   Support `arbitrary_precision` feature even in no-std mode ([#&#8203;928](https://togithub.com/serde-rs/json/issues/928), thanks [@&#8203;kvinwang](https://togithub.com/kvinwang))

</details>

<details>
<summary>dtolnay/serde-yaml</summary>

### [`v0.9.14`](https://togithub.com/dtolnay/serde-yaml/releases/tag/0.9.14)

[Compare Source](https://togithub.com/dtolnay/serde-yaml/compare/0.9.13...0.9.14)

-   Implement `Deserializer` for `TaggedValue` and `&TaggedValue` ([#&#8203;339](https://togithub.com/dtolnay/serde-yaml/issues/339))

### [`v0.9.13`](https://togithub.com/dtolnay/serde-yaml/releases/tag/0.9.13)

[Compare Source](https://togithub.com/dtolnay/serde-yaml/compare/0.9.12...0.9.13)

-   Recognize `True`, `TRUE`, `False`, `FALSE` as booleans, `Null`, `NULL` as null ([#&#8203;330](https://togithub.com/dtolnay/serde-yaml/issues/330))

### [`v0.9.12`](https://togithub.com/dtolnay/serde-yaml/releases/tag/0.9.12)

[Compare Source](https://togithub.com/dtolnay/serde-yaml/compare/0.9.11...0.9.12)

-   Support deserializing tagged literal scalar into primitive ([#&#8203;327](https://togithub.com/dtolnay/serde-yaml/issues/327))

    ```yaml
    "foo": !!int |-
      7200
    ```

### [`v0.9.11`](https://togithub.com/dtolnay/serde-yaml/releases/tag/0.9.11)

[Compare Source](https://togithub.com/dtolnay/serde-yaml/compare/0.9.10...0.9.11)

-   Serialize strings on a single line when they do not already contain a newline character, regardless of string length ([#&#8203;321](https://togithub.com/dtolnay/serde-yaml/issues/321), [#&#8203;322](https://togithub.com/dtolnay/serde-yaml/issues/322))

</details>

<details>
<summary>shepmaster/snafu</summary>

### [`v0.7.3`](https://togithub.com/shepmaster/snafu/blob/HEAD/CHANGELOG.md#&#8203;073---2022-10-20)

[Compare Source](https://togithub.com/shepmaster/snafu/compare/0.7.2...0.7.3)

##### Fixed

-   The macro no longer generates invalid code when implicitly-generated
    types (such as backtraces) were used in conjunction with
    `#[snafu(source(from))]` and the type before transformation does not
    implement `std::error::Error`.

[0.7.3]: https://togithub.com/shepmaster/snafu/releases/tag/0.7.3

### [`v0.7.2`](https://togithub.com/shepmaster/snafu/blob/HEAD/CHANGELOG.md#&#8203;072---2022-10-09)

[Compare Source](https://togithub.com/shepmaster/snafu/compare/0.7.1...0.7.2)

##### Added

-   `Report` can be returned from `main` or test functions to provide a
    user-friendly display of errors.

-   A cheat sheet for the most common `#[snafu(...)]` attribute usages
    has been added to the `Snafu` macro's documentation.

-   Optional support for using the standard library's
    `std::backtrace::Backtrace` type via the `backtraces-impl-std`
    feature flag.

-   Optional support for implementing the Provider API using the
    `std::error::Error::provide` method via the `unstable-provider-api`
    feature flag.

-   Optional support for implementing the `core::error::Error` trait
    instead of `std::error::Error` via the `unstable-core-error` feature
    flag.

-   `GenerateImplicitData` has a new method `generate_with_source`.

##### Changed

-   `ErrorCompat::iter_chain` and `ChainCompat` are now available in
    no_std environments.

-   `ChainCompat` now implements `Clone`.

-   The `Debug` implementation for `Location` no longer shows some
    irrelevant internal details.

[0.7.2]: https://togithub.com/shepmaster/snafu/releases/tag/0.7.2

</details>

<details>
<summary>dtolnay/syn</summary>

### [`v1.0.103`](https://togithub.com/dtolnay/syn/releases/tag/1.0.103)

[Compare Source](https://togithub.com/dtolnay/syn/compare/1.0.102...1.0.103)

-   Implement `PartialOrd` for `Cursor` ([#&#8203;1236](https://togithub.com/dtolnay/syn/issues/1236), [#&#8203;1237](https://togithub.com/dtolnay/syn/issues/1237), thanks [@&#8203;CAD97](https://togithub.com/CAD97))

### [`v1.0.102`](https://togithub.com/dtolnay/syn/releases/tag/1.0.102)

[Compare Source](https://togithub.com/dtolnay/syn/compare/1.0.101...1.0.102)

-   More efficient internal representation for `TokenBuffer` ([#&#8203;1223](https://togithub.com/dtolnay/syn/issues/1223), thanks [@&#8203;CAD97](https://togithub.com/CAD97))
-   Fix parsing of a left shift after macro metavariable in type position ([#&#8203;1229](https://togithub.com/dtolnay/syn/issues/1229))

### [`v1.0.101`](https://togithub.com/dtolnay/syn/releases/tag/1.0.101)

[Compare Source](https://togithub.com/dtolnay/syn/compare/1.0.100...1.0.101)

-   Eliminate a bunch of redundant work done by LitStr::parse ([#&#8203;1221](https://togithub.com/dtolnay/syn/issues/1221))

### [`v1.0.100`](https://togithub.com/dtolnay/syn/releases/tag/1.0.100)

[Compare Source](https://togithub.com/dtolnay/syn/compare/1.0.99...1.0.100)

-   Parse closures with explicit empty lifetime parameter list `for<> || -> T {…}` ([#&#8203;1212](https://togithub.com/dtolnay/syn/issues/1212), [https://github.com/rust-lang/rust/issues/97362](https://togithub.com/rust-lang/rust/issues/97362))
-   Parse `dyn*` provisional syntax ([#&#8203;1213](https://togithub.com/dtolnay/syn/issues/1213), [https://github.com/rust-lang/rust/issues/91611](https://togithub.com/rust-lang/rust/issues/91611))
-   Parse attributes on the "rest" pattern of a struct in pattern position, `Struct { #[attr] .. }` ([#&#8203;1214](https://togithub.com/dtolnay/syn/issues/1214))
-   Parse `static async` and `static async move` closures ([#&#8203;1215](https://togithub.com/dtolnay/syn/issues/1215), [https://github.com/rust-lang/rust/issues/62290](https://togithub.com/rust-lang/rust/issues/62290))

</details>

<details>
<summary>dtolnay/thiserror</summary>

### [`v1.0.37`](https://togithub.com/dtolnay/thiserror/releases/tag/1.0.37)

[Compare Source](https://togithub.com/dtolnay/thiserror/compare/1.0.36...1.0.37)

-   Documentation improvements

### [`v1.0.36`](https://togithub.com/dtolnay/thiserror/releases/tag/1.0.36)

[Compare Source](https://togithub.com/dtolnay/thiserror/compare/1.0.35...1.0.36)

-   Documentation improvements ([#&#8203;195](https://togithub.com/dtolnay/thiserror/issues/195), thanks [@&#8203;matklad](https://togithub.com/matklad))

### [`v1.0.35`](https://togithub.com/dtolnay/thiserror/releases/tag/1.0.35)

[Compare Source](https://togithub.com/dtolnay/thiserror/compare/1.0.34...1.0.35)

-   More work on integrating [std::any::Provider](https://doc.rust-lang.org/std/any/trait.Provider.html) for backtrace support
-   Fix *"Multiple applicable `provide` methods in scope"* error when the caller has both std::error::Error and std::any::Provide traits in scope ([#&#8203;185](https://togithub.com/dtolnay/thiserror/issues/185))

### [`v1.0.34`](https://togithub.com/dtolnay/thiserror/releases/tag/1.0.34)

[Compare Source](https://togithub.com/dtolnay/thiserror/compare/1.0.33...1.0.34)

-   Tweak "generic member access" based Backtrace implementation ([#&#8203;184](https://togithub.com/dtolnay/thiserror/issues/184))

### [`v1.0.33`](https://togithub.com/dtolnay/thiserror/releases/tag/1.0.33)

[Compare Source](https://togithub.com/dtolnay/thiserror/compare/1.0.32...1.0.33)

-   Expose backtraces via the new "generic member access" API on the Error trait ([https://github.com/rust-lang/rust/issues/99301](https://togithub.com/rust-lang/rust/issues/99301), [https://github.com/rust-lang/rust/issues/96024](https://togithub.com/rust-lang/rust/issues/96024))

</details>

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

### [`v1.21.2`](https://togithub.com/tokio-rs/tokio/releases/tag/tokio-1.21.2)

[Compare Source](https://togithub.com/tokio-rs/tokio/compare/tokio-1.21.1...tokio-1.21.2)

### 1.21.2 (September 27, 2022)

This release removes the dependency on the `once_cell` crate to restore the MSRV of 1.21.x, which is the latest minor version at the time of release. ([#&#8203;5048])

[#&#8203;5048]: https://togithub.com/tokio-rs/tokio/pull/5048

</details>

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

### [`v0.1.37`](https://togithub.com/tokio-rs/tracing/releases/tag/tracing-0.1.37)

[Compare Source](https://togithub.com/tokio-rs/tracing/compare/tracing-0.1.36...tracing-0.1.37)

This release of `tracing` incorporates changes from `tracing-core`
[v0.1.30][core-0.1.30] and `tracing-attributes` [v0.1.23][attrs-0.1.23],
including the new `Subscriber::on_register_dispatch` method for performing late
initialization after a `Subscriber` is registered as a `Dispatch`, and bugfixes
for the `#[instrument]` attribute. Additionally, it fixes instances of the
`bare_trait_objects` lint, which is now a warning on `tracing`'s MSRV and will
become an error in the next edition.

##### Fixed

-   **attributes**: Incorrect handling of inner attributes in `#[instrument]`ed
    functions ([#&#8203;2307])
-   **attributes**: Incorrect location of compiler diagnostic spans generated for
    type errors in `#[instrument]`ed `async fn`s ([#&#8203;2270])
-   **attributes**: Updated `syn` dependency to fix compilation with `-Z
    minimal-versions` ([#&#8203;2246])
-   `bare_trait_objects` warning in `valueset!` macro expansion ([#&#8203;2308])

##### Added

-   **core**: `Subscriber::on_register_dispatch` method ([#&#8203;2269])
-   **core**: `WeakDispatch` type and `Dispatch::downgrade()` function ([#&#8203;2293])

##### Changed

-   `tracing-core`: updated to [0.1.30][core-0.1.30]
-   `tracing-attributes`: updated to [0.1.23][attrs-0.1.23]

##### Documented

-   Added [`tracing-web`][tracing-web] and [`reqwest-tracing`][reqwest-tracing] to related crates ([#&#8203;2283],
    [#&#8203;2331])

Thanks to new contributors [@&#8203;compiler-errors](https://togithub.com/compiler-errors), [@&#8203;e-nomem](https://togithub.com/e-nomem), [@&#8203;WorldSEnder](https://togithub.com/WorldSEnder), [@&#8203;Xiami2012](https://togithub.com/Xiami2012),
and [@&#8203;tl-rodrigo-gryzinski](https://togithub.com/tl-rodrigo-gryzinski), as well as [@&#8203;jswrenn](https://togithub.com/jswrenn) and [@&#8203;CAD97](https://togithub.com/CAD97), for contributing to
this release!

[core-0.1.30]: https://togithub.com/tokio-rs/tracing/releases/tag/tracing-core-0.1.30

[attrs-0.1.23]: https://togithub.com/tokio-rs/tracing/releases/tag/tracing-attributes-0.1.23

[`tracing-web`]: https://crates.io/crates/tracing-web/

[`reqwest-tracing`]: https://crates.io/crates/reqwest-tracing/

[#&#8203;2246]: https://togithub.com/tokio-rs/tracing/pull/2246

[#&#8203;2269]: https://togithub.com/tokio-rs/tracing/pull/2269

[#&#8203;2283]: https://togithub.com/tokio-rs/tracing/pull/2283

[#&#8203;2270]: https://togithub.com/tokio-rs/tracing/pull/2270

[#&#8203;2293]: https://togithub.com/tokio-rs/tracing/pull/2293

[#&#8203;2307]: https://togithub.com/tokio-rs/tracing/pull/2307

[#&#8203;2308]: https://togithub.com/tokio-rs/tracing/pull/2308

[#&#8203;2331]: https://togithub.com/tokio-rs/tracing/pull/2331

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 5:00 and before 6:00 every weekday" in timezone Europe/Berlin, 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.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/stackabletech/operator-rs).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4yMTcuMCIsInVwZGF0ZWRJblZlciI6IjM0LjE0LjAifQ==-->
@robamler
Copy link
Contributor

Not sure if this has been proposed before, but maybe an alternative to "fully qualified method call but with deref/autoref" could be that, in case of an ambiguity, trait method resolution favors traits that were introduced in inner scopes.

Currently, the following code doesn't compile:

fn foo(x: u32, formatter: &mut core::fmt::Formatter) {
    use core::fmt::{Display, Debug};

    { // Imagine this block was generated by a macro that only needs `Display` but not `Debug`.
        use core::fmt::Display; // currently leads to a warning: "the item `Display` is imported redundantly"
        x.fmt(formatter); // currently leads to an error: "multiple `fmt` found"
    }
}

The proposal would be to allow the above code, and to resolve x.fmt(formatter) to core::fmt::Display::fmt(&x, formatter) since Display was used in a strictly narrower scope than Debug.

I don't think this would change any behavior in code that currently compiles since it would only disambiguate cases that are currently ambiguous. And it would allow macro authors to simply introduce a new scope and use any traits that their macros will need (this wouldn't leak any identifies to the outer scope since, already today, those uses are scoped to the inner block).

Yatekii referenced this issue in probe-rs/probe-rs Jan 31, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [anyhow](https://togithub.com/dtolnay/anyhow) | dependencies | patch |
`1.0.57` -> `1.0.68` |
| [anyhow](https://togithub.com/dtolnay/anyhow) | dependencies | patch |
`1.0.40` -> `1.0.68` |
| [anyhow](https://togithub.com/dtolnay/anyhow) | workspace.dependencies
| patch | `1.0.34` -> `1.0.68` |
| [assert_cmd](https://togithub.com/assert-rs/assert_cmd) |
dev-dependencies | patch | `2.0.4` -> `2.0.8` |
| [assert_fs](https://togithub.com/assert-rs/assert_fs) |
dev-dependencies | patch | `1.0.7` -> `1.0.10` |
| [bincode](https://togithub.com/bincode-org/bincode) |
build-dependencies | patch | `1.3.2` -> `1.3.3` |
| [bincode](https://togithub.com/bincode-org/bincode) | dependencies |
patch | `1.3.2` -> `1.3.3` |
| [byte-unit](https://magiclen.org/byte-unit)
([source](https://togithub.com/magiclen/byte-unit)) | dependencies |
patch | `4.0.13` -> `4.0.18` |
| [cargo_metadata](https://togithub.com/oli-obk/cargo_metadata) |
dependencies | patch | `0.15.0` -> `0.15.3` |
| [dunce](https://lib.rs/crates/dunce)
([source](https://gitlab.com/kornelski/dunce)) | dependencies | patch |
`1.0.1` -> `1.0.3` |
|
[enum-primitive-derive](https://gitlab.com/cardoe/enum-primitive-derive)
| dependencies | patch | `0.2.1` -> `0.2.2` |
| [gdbstub](https://togithub.com/daniel5151/gdbstub) | dependencies |
patch | `0.6.2` -> `0.6.3` |
| [gimli](https://togithub.com/gimli-rs/gimli) | dependencies | patch |
`0.27.0` -> `0.27.1` |
| [hexdump](https://togithub.com/tbu-/hexdump) | dependencies | patch |
`0.1.0` -> `0.1.1` |
| [hidapi](https://togithub.com/ruabmbua/hidapi-rs) | dependencies |
minor | `2.0.2` -> `2.1.2` |
| [indicatif](https://togithub.com/console-rs/indicatif) | dependencies
| patch | `0.17.0` -> `0.17.3` |
| [insta](https://insta.rs/)
([source](https://togithub.com/mitsuhiko/insta)) | dev-dependencies |
minor | `1.10.0` -> `1.26.0` |
| [insta](https://insta.rs/)
([source](https://togithub.com/mitsuhiko/insta)) | dev-dependencies |
minor | `1.8.0` -> `1.26.0` |
| [itertools](https://togithub.com/rust-itertools/itertools) |
dependencies | patch | `0.10.3` -> `0.10.5` |
| [jep106](https://togithub.com/Yatekii/jep106) | dependencies | patch |
`0.2.6` -> `0.2.8` |
| [log](https://togithub.com/rust-lang/log) | dependencies | patch |
`0.4.16` -> `0.4.17` |
| [log](https://togithub.com/rust-lang/log) | dependencies | patch |
`0.4.14` -> `0.4.17` |
| [log](https://togithub.com/rust-lang/log) | dependencies | patch |
`0.4.0` -> `0.4.17` |
| [log](https://togithub.com/rust-lang/log) | workspace.dependencies |
patch | `0.4.6` -> `0.4.17` |
| [num-traits](https://togithub.com/rust-num/num-traits) | dependencies
| patch | `0.2.11` -> `0.2.15` |
| [num-traits](https://togithub.com/rust-num/num-traits) | dependencies
| patch | `0.2.14` -> `0.2.15` |
| [object](https://togithub.com/gimli-rs/object) | dependencies | patch
| `0.30.0` -> `0.30.3` |
| [once_cell](https://togithub.com/matklad/once_cell) | dependencies |
minor | `1.7.2` -> `1.17.0` |
| [predicates](https://togithub.com/assert-rs/predicates-rs) |
dev-dependencies | patch | `2.1.1` -> `2.1.5` |
| [rand](https://rust-random.github.io/book)
([source](https://togithub.com/rust-random/rand)) | dev-dependencies |
patch | `0.8.0` -> `0.8.5` |
| [reqwest](https://togithub.com/seanmonstar/reqwest) | dependencies |
patch | `0.11.10` -> `0.11.14` |
| [reqwest](https://togithub.com/seanmonstar/reqwest) | dependencies |
patch | `0.11.13` -> `0.11.14` |
| [rusb](https://togithub.com/a1ien/rusb) | dependencies | patch |
`0.9.0` -> `0.9.1` |
| [rustyline](https://togithub.com/kkawakam/rustyline) | dependencies |
minor | `10.0.0` -> `10.1.1` |
| [sentry](https://sentry.io/welcome/)
([source](https://togithub.com/getsentry/sentry-rust)) | dependencies |
patch | `0.29.0` -> `0.29.2` |
| [serde](https://serde.rs)
([source](https://togithub.com/serde-rs/serde)) | dependencies | patch |
`1.0.147` -> `1.0.152` |
| [serde_json](https://togithub.com/serde-rs/json) | dev-dependencies |
patch | `1.0.47` -> `1.0.91` |
| [serde_yaml](https://togithub.com/dtolnay/serde-yaml) |
build-dependencies | patch | `0.9.4` -> `0.9.17` |
| [svd-parser](https://togithub.com/rust-embedded/svd) | dependencies |
patch | `0.14.0` -> `0.14.1` |
| [terminal_size](https://togithub.com/eminence/terminal-size) |
dependencies | patch | `0.2.0` -> `0.2.3` |
| [zip](https://togithub.com/zip-rs/zip) | dependencies | patch |
`0.6.2` -> `0.6.3` |

---

### Release Notes

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

### [`v1.0.68`](https://togithub.com/dtolnay/anyhow/releases/tag/1.0.68)

[Compare
Source](https://togithub.com/dtolnay/anyhow/compare/1.0.67...1.0.68)

-   Opt out of `-Zrustdoc-scrape-examples` on docs.rs for now

### [`v1.0.67`](https://togithub.com/dtolnay/anyhow/releases/tag/1.0.67)

[Compare
Source](https://togithub.com/dtolnay/anyhow/compare/1.0.66...1.0.67)

- Improve the backtrace captured when `context()` is used on an `Option`
([#&#8203;280](https://togithub.com/dtolnay/anyhow/issues/280))

### [`v1.0.66`](https://togithub.com/dtolnay/anyhow/releases/tag/1.0.66)

[Compare
Source](https://togithub.com/dtolnay/anyhow/compare/1.0.65...1.0.66)

- Reduce unhelpful backtrace frames in backtraces captured during a
`context` call
([#&#8203;279](https://togithub.com/dtolnay/anyhow/issues/279))

### [`v1.0.65`](https://togithub.com/dtolnay/anyhow/releases/tag/1.0.65)

[Compare
Source](https://togithub.com/dtolnay/anyhow/compare/1.0.64...1.0.65)

- <code>impl <a
href="https://doc.rust-lang.org/std/any/trait.Provider.html">Provider</a>
for anyhow::Error</code>

### [`v1.0.64`](https://togithub.com/dtolnay/anyhow/releases/tag/1.0.64)

[Compare
Source](https://togithub.com/dtolnay/anyhow/compare/1.0.63...1.0.64)

- Correctly propagate Backtrace when using `#[source] anyhow::Error`
with [thiserror](https://togithub.com/dtolnay/thiserror) crate
([#&#8203;231](https://togithub.com/dtolnay/anyhow/issues/231))

### [`v1.0.63`](https://togithub.com/dtolnay/anyhow/releases/tag/1.0.63)

[Compare
Source](https://togithub.com/dtolnay/anyhow/compare/1.0.62...1.0.63)

- Expose backtraces via the new "generic member access" API on the Error
trait
([https://github.com/rust-lang/rust/issues/99301](https://togithub.com/rust-lang/rust/issues/99301),
[https://github.com/rust-lang/rust/issues/96024](https://togithub.com/rust-lang/rust/issues/96024))

### [`v1.0.62`](https://togithub.com/dtolnay/anyhow/releases/tag/1.0.62)

[Compare
Source](https://togithub.com/dtolnay/anyhow/compare/1.0.61...1.0.62)

- Fix extra rebuilding when interleaving command-line `cargo`
invocations with IDE builds
([#&#8203;261](https://togithub.com/dtolnay/anyhow/issues/261))

### [`v1.0.61`](https://togithub.com/dtolnay/anyhow/releases/tag/1.0.61)

[Compare
Source](https://togithub.com/dtolnay/anyhow/compare/1.0.60...1.0.61)

- Work around rust-analyzer builds poisoning all subsequent command-line
cargo builds
([#&#8203;252](https://togithub.com/dtolnay/anyhow/issues/252))

### [`v1.0.60`](https://togithub.com/dtolnay/anyhow/releases/tag/1.0.60)

[Compare
Source](https://togithub.com/dtolnay/anyhow/compare/1.0.59...1.0.60)

- Propagate `--target` to rustc invocation when deciding about backtrace
support ([#&#8203;249](https://togithub.com/dtolnay/anyhow/issues/249),
thanks [@&#8203;RalfJung](https://togithub.com/RalfJung))

### [`v1.0.59`](https://togithub.com/dtolnay/anyhow/releases/tag/1.0.59)

[Compare
Source](https://togithub.com/dtolnay/anyhow/compare/1.0.58...1.0.59)

-   Update crates.io metadata to include `no-std` category

### [`v1.0.58`](https://togithub.com/dtolnay/anyhow/releases/tag/1.0.58)

[Compare
Source](https://togithub.com/dtolnay/anyhow/compare/1.0.57...1.0.58)

-   Fix some broken links in documentation

</details>

<details>
<summary>assert-rs/assert_cmd</summary>

###
[`v2.0.8`](https://togithub.com/assert-rs/assert_cmd/blob/HEAD/CHANGELOG.md#&#8203;208---2023-01-09)

[Compare
Source](https://togithub.com/assert-rs/assert_cmd/compare/v2.0.7...v2.0.8)

##### Features

-   Make binary data easier to read by resolving newlines

###
[`v2.0.7`](https://togithub.com/assert-rs/assert_cmd/blob/HEAD/CHANGELOG.md#&#8203;207---2022-12-02)

[Compare
Source](https://togithub.com/assert-rs/assert_cmd/compare/v2.0.6...v2.0.7)

###
[`v2.0.6`](https://togithub.com/assert-rs/assert_cmd/blob/HEAD/CHANGELOG.md#&#8203;206---2022-11-04)

[Compare
Source](https://togithub.com/assert-rs/assert_cmd/compare/v2.0.5...v2.0.6)

##### Fixes

-   Hide internal-only optional dependencies

###
[`v2.0.5`](https://togithub.com/assert-rs/assert_cmd/blob/HEAD/CHANGELOG.md#&#8203;205---2022-10-20)

[Compare
Source](https://togithub.com/assert-rs/assert_cmd/compare/v2.0.4...v2.0.5)

##### Features

-   Added `AssertError::assert`

</details>

<details>
<summary>assert-rs/assert_fs</summary>

###
[`v1.0.10`](https://togithub.com/assert-rs/assert_fs/blob/HEAD/CHANGELOG.md#&#8203;1010---2022-12-02)

[Compare
Source](https://togithub.com/assert-rs/assert_fs/compare/v1.0.9...v1.0.10)

###
[`v1.0.9`](https://togithub.com/assert-rs/assert_fs/blob/HEAD/CHANGELOG.md#&#8203;109---2022-11-07)

[Compare
Source](https://togithub.com/assert-rs/assert_fs/compare/v1.0.8...v1.0.9)

##### Fixes

-   Add `Debug` impls for temp dir / file

###
[`v1.0.8`](https://togithub.com/assert-rs/assert_fs/blob/HEAD/CHANGELOG.md#&#8203;108---2022-11-04)

[Compare
Source](https://togithub.com/assert-rs/assert_fs/compare/v1.0.7...v1.0.8)

##### Fixes

-   Hide internal-only optional dependencies

</details>

<details>
<summary>bincode-org/bincode</summary>

###
[`v1.3.3`](https://togithub.com/bincode-org/bincode/releases/tag/v1.3.3)

[Compare
Source](https://togithub.com/bincode-org/bincode/compare/v1.3.2...v1.3.3)

-   Removed `byteorder` as a dependency

</details>

<details>
<summary>magiclen/byte-unit</summary>

###
[`v4.0.18`](https://togithub.com/magiclen/byte-unit/compare/v4.0.17...v4.0.18)

[Compare
Source](https://togithub.com/magiclen/byte-unit/compare/v4.0.17...v4.0.18)

###
[`v4.0.17`](https://togithub.com/magiclen/byte-unit/compare/v4.0.16...v4.0.17)

[Compare
Source](https://togithub.com/magiclen/byte-unit/compare/v4.0.16...v4.0.17)

###
[`v4.0.16`](https://togithub.com/magiclen/byte-unit/compare/v4.0.15...v4.0.16)

[Compare
Source](https://togithub.com/magiclen/byte-unit/compare/v4.0.15...v4.0.16)

###
[`v4.0.15`](https://togithub.com/magiclen/byte-unit/compare/v4.0.14...v4.0.15)

[Compare
Source](https://togithub.com/magiclen/byte-unit/compare/v4.0.14...v4.0.15)

###
[`v4.0.14`](https://togithub.com/magiclen/byte-unit/compare/v4.0.13...v4.0.14)

[Compare
Source](https://togithub.com/magiclen/byte-unit/compare/v4.0.13...v4.0.14)

</details>

<details>
<summary>oli-obk/cargo_metadata</summary>

###
[`v0.15.3`](https://togithub.com/oli-obk/cargo_metadata/compare/v0.15.2...0.15.3)

[Compare
Source](https://togithub.com/oli-obk/cargo_metadata/compare/v0.15.2...0.15.3)

###
[`v0.15.2`](https://togithub.com/oli-obk/cargo_metadata/compare/v0.15.1...v0.15.2)

[Compare
Source](https://togithub.com/oli-obk/cargo_metadata/compare/v0.15.1...v0.15.2)

###
[`v0.15.1`](https://togithub.com/oli-obk/cargo_metadata/compare/v0.15.0...v0.15.1)

[Compare
Source](https://togithub.com/oli-obk/cargo_metadata/compare/v0.15.0...v0.15.1)

</details>

<details>
<summary>cardoe/enum-primitive-derive</summary>

###
[`v0.2.2`](https://gitlab.com/cardoe/enum-primitive-derive/blob/HEAD/CHANGELOG.md#&#8203;022)

[Compare
Source](https://gitlab.com/cardoe/enum-primitive-derive/compare/v0.2.1...v0.2.2)

##### Changed

-   Switch to using core instead of std for no-std support

</details>

<details>
<summary>daniel5151/gdbstub</summary>

###
[`v0.6.3`](https://togithub.com/daniel5151/gdbstub/blob/HEAD/CHANGELOG.md#&#8203;063)

[Compare
Source](https://togithub.com/daniel5151/gdbstub/compare/0.6.2...0.6.3)

##### New Features

- `SingleRegisterAccess`: Support reporting unavailable regs
[#&#8203;107](https://togithub.com/daniel5151/gdbstub/pull/107)
([ptosi](https://togithub.com/ptosi))

</details>

<details>
<summary>gimli-rs/gimli</summary>

###
[`v0.27.1`](https://togithub.com/gimli-rs/gimli/blob/HEAD/CHANGELOG.md#&#8203;0271)

[Compare
Source](https://togithub.com/gimli-rs/gimli/compare/0.27.0...0.27.1)

Released 2023/01/23.

##### Added

- Added `SectionId::xcoff_name` and `read::Section::xcoff_section_name`.
    [#&#8203;635](https://togithub.com/gimli-rs/gimli/pull/635)

-   Added `read::Dwarf::make_dwo` and `read::Unit::dwo_name`.
    [#&#8203;637](https://togithub.com/gimli-rs/gimli/pull/637)

##### Changed

- Changed `read::DwarfPackage::sections` to handle supplementary files.
    [#&#8203;638](https://togithub.com/gimli-rs/gimli/pull/638)

***

</details>

<details>
<summary>console-rs/indicatif</summary>

###
[`v0.17.3`](https://togithub.com/console-rs/indicatif/releases/tag/0.17.3)

[Compare
Source](https://togithub.com/console-rs/indicatif/compare/0.17.2...0.17.3)

A small maintenance release:

- address a bunch of lints by
[@&#8203;danieleades](https://togithub.com/danieleades) in
[https://github.com/console-rs/indicatif/pull/498](https://togithub.com/console-rs/indicatif/pull/498)
- Remove `"fs"` feature in tokio dependency. by
[@&#8203;azriel91](https://togithub.com/azriel91) in
[https://github.com/console-rs/indicatif/pull/504](https://togithub.com/console-rs/indicatif/pull/504)
- Update estimate when using a steady ticker by
[@&#8203;aawsome](https://togithub.com/aawsome) in
[https://github.com/console-rs/indicatif/pull/495](https://togithub.com/console-rs/indicatif/pull/495)
-   Refactoring and internal improvements

**Full Changelog**:
https://github.com/console-rs/indicatif/compare/0.17.2...0.17.3

###
[`v0.17.2`](https://togithub.com/console-rs/indicatif/releases/tag/0.17.2)

[Compare
Source](https://togithub.com/console-rs/indicatif/compare/0.17.1...0.17.2)

A small maintenance release which makes indicatif more portable and
fixes some minor regressions.

- Use portable-atomic to fix build on some 32-bit platforms
([#&#8203;484](https://togithub.com/console-rs/indicatif/issues/484),
thanks to [@&#8203;messense](https://togithub.com/messense))
- Implement multi-line progress message support
([#&#8203;443](https://togithub.com/console-rs/indicatif/issues/443),
thanks to [@&#8203;happenslol](https://togithub.com/happenslol))
- Reset estimator of progress rate on backwards movement
([#&#8203;483](https://togithub.com/console-rs/indicatif/issues/483),
thanks to [@&#8203;rlee287](https://togithub.com/rlee287))
- Fix percent initial value when there is no length
([#&#8203;491](https://togithub.com/console-rs/indicatif/issues/491),
thanks to [@&#8203;devmatteini](https://togithub.com/devmatteini))
- Bumped the MSRV to 1.56
([#&#8203;482](https://togithub.com/console-rs/indicatif/issues/482))

On behalf of [@&#8203;djc](https://togithub.com/djc) and
[@&#8203;chris-laplante](https://togithub.com/chris-laplante), thanks to
all contributors!

###
[`v0.17.1`](https://togithub.com/console-rs/indicatif/releases/tag/0.17.1)

[Compare
Source](https://togithub.com/console-rs/indicatif/compare/0.17.0...0.17.1)

2.5 months after the large 0.17 release, we (finally) have a release
that addresses most of the regressions found in 0.17. There is ongoing
work on changes in the estimation algorithm, tracked in
[#&#8203;394](https://togithub.com/console-rs/indicatif/issues/394),
which has regressed for some users.

Note that we made some technically semver-breaking change of adding a
missing `Sync` bound to the `ProgressTracker` bounds
([#&#8203;471](https://togithub.com/console-rs/indicatif/issues/471)).
We're assuming that most users don't (yet) have custom `ProgressTracker`
impls, and that users who do have probably built one that is `Sync`
anyway.

#### Fixed regressions

- Fixed `unicode-width` feature spelling
([#&#8203;456](https://togithub.com/console-rs/indicatif/issues/456))
- Only tick if the ticker is disabled
([#&#8203;458](https://togithub.com/console-rs/indicatif/issues/458))
- Rework `MultiProgress` zombie line handling
([#&#8203;460](https://togithub.com/console-rs/indicatif/issues/460))
- Fix incorrect link in documentation
([#&#8203;469](https://togithub.com/console-rs/indicatif/issues/469),
thanks to [@&#8203;Jedsek](https://togithub.com/Jedsek))
- Take a reference for `ProgressBar::style()`
([#&#8203;476](https://togithub.com/console-rs/indicatif/issues/476),
thanks to [@&#8203;andrewchambers](https://togithub.com/andrewchambers))

#### Other changes

- Add `HumanFloatCount` formatting option
([#&#8203;453](https://togithub.com/console-rs/indicatif/issues/453),
thanks to [@&#8203;jqnatividad](https://togithub.com/jqnatividad))
- Add `Sync` bound to `ProgressTracker`
([#&#8203;471](https://togithub.com/console-rs/indicatif/issues/471))
- Update ProgressDrawTarget documentation
([#&#8203;472](https://togithub.com/console-rs/indicatif/issues/472),
thanks to [@&#8203;AronParker](https://togithub.com/AronParker))
- Correct mis-naming of variables in wrap_async_read
([#&#8203;473](https://togithub.com/console-rs/indicatif/issues/473),
thanks to [@&#8203;octylFractal](https://togithub.com/octylFractal))
- Remove `write_all()` impl from `ProgressBarIter`'s `Write` impl
([#&#8203;478](https://togithub.com/console-rs/indicatif/issues/478),
thanks to [@&#8203;hexagonal-sun](https://togithub.com/hexagonal-sun))
- Document last char/string in tick style being the "final" state
([#&#8203;479](https://togithub.com/console-rs/indicatif/issues/479),
thanks to [@&#8203;MarijnS95](https://togithub.com/MarijnS95))

Thanks from [@&#8203;djc](https://togithub.com/djc) and
[@&#8203;chris-laplante](https://togithub.com/chris-laplante) to all
contributors!

</details>

<details>
<summary>mitsuhiko/insta</summary>

###
[`v1.26.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1260)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.24.1...1.26.0)

-   Make canonicalization in `glob!` optional to better support WASI.

###
[`v1.24.1`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1241)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.24.0...1.24.1)

- Fix non working `--include-hidden` flag
([#&#8203;331](https://togithub.com/mitsuhiko/insta/issues/331))
- Fix incorrect mapping of `review.include_ignored`
([#&#8203;330](https://togithub.com/mitsuhiko/insta/issues/330))

###
[`v1.24.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1240)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.23.0...1.24.0)

-   Added an insta tool config (`.config/insta.yaml`) to change the
behavior of insta and cargo-insta.
([#&#8203;322](https://togithub.com/mitsuhiko/insta/issues/322))
-   Renamed `--no-ignore` to `--include-ignored`.
-   Added `--include-hidden` to instruct insta to also walk into
    hidden paths.
-   Added new `--unreferenced` option to `cargo-insta test` which allows
    fine tuning of what should happen with unreferenced files.  It's now
    possible to ignore (default), warn, reject or delete unreferenced
snapshots.
([#&#8203;328](https://togithub.com/mitsuhiko/insta/issues/328))
-   Resolved an error message about doc tests when using nextest with
test targeting.
([#&#8203;317](https://togithub.com/mitsuhiko/insta/issues/317))

###
[`v1.23.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1230)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.22.0...1.23.0)

- Add a hint if snapshots might be skipped.
([#&#8203;314](https://togithub.com/mitsuhiko/insta/issues/314))
- Avoid extra newline in YAML snapshots.
([#&#8203;311](https://togithub.com/mitsuhiko/insta/issues/311))

###
[`v1.22.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1220)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.21.2...1.22.0)

-   Added support for rendering some invisibles in diffs.  This now also
should make sure that ANSI sequences in strings are no longer screwing
up the terminal output.
([#&#8203;308](https://togithub.com/mitsuhiko/insta/issues/308))
- Prevent inline snapshots to be used in loops.
([#&#8203;307](https://togithub.com/mitsuhiko/insta/issues/307))
- Support the `--target` option to `cargo insta test`.
([#&#8203;309](https://togithub.com/mitsuhiko/insta/issues/309))
-   Globbing now adds directories as disambiguators into the snapshot
    suffixes. This allows patterns such as `foo/*/*.txt` without
creating conflicts.
([#&#8203;310](https://togithub.com/mitsuhiko/insta/issues/310))

###
[`v1.21.2`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1212)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.21.1...1.21.2)

- Added missing parameters to `cargo insta test`.
([#&#8203;305](https://togithub.com/mitsuhiko/insta/issues/305))
- Fixed a sorting issue in hash maps for compound keys.
([#&#8203;304](https://togithub.com/mitsuhiko/insta/issues/304))

###
[`v1.21.1`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1211)

-   Fix incorrect handling of extra args to `cargo insta test`.

###
[`v1.21.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1210)

- Fixed an issue that broke support for older rust versions.
([#&#8203;292](https://togithub.com/mitsuhiko/insta/issues/292))
-   Added `cargo insta show` command to render a snapshot.
- Added support for compact JSON snapshots.
([#&#8203;288](https://togithub.com/mitsuhiko/insta/issues/288))

###
[`v1.20.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1200)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.19.1...1.20.0)

- `cargo insta` now supports nextest as test runner.
([#&#8203;285](https://togithub.com/mitsuhiko/insta/issues/285))
- The `glob!` macro now defers failures by default.
([#&#8203;284](https://togithub.com/mitsuhiko/insta/issues/284))

###
[`v1.19.1`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1191)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.19.0...1.19.1)

- Added support for numeric keys in JSON which regressed in 0.18.0.
([#&#8203;281](https://togithub.com/mitsuhiko/insta/issues/281))

###
[`v1.19.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1190)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.18.2...1.19.0)

-   Removed `backtrace` feature.
-   Removed `serialization` feature.
-   `assert_json_snapshot!` and `assert_yaml_snapshot!` now require
    the `json` and `yaml` feature respectively.
-   Doctests now emit a warning that inline snapshot updating is
not supported
([#&#8203;272](https://togithub.com/mitsuhiko/insta/issues/272))
-   Added support for `INSTA_GLOB_FILTER` to skip over tests expanded
from a glob.
([#&#8203;274](https://togithub.com/mitsuhiko/insta/issues/274))

###
[`v1.18.2`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1182)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.18.1...1.18.2)

- Avoid the use of `#[allow(unused)]` in the macro.
([#&#8203;271](https://togithub.com/mitsuhiko/insta/issues/271))

###
[`v1.18.1`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1181)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.18.0...1.18.1)

- Fixed a regression in the JSON serialization format with newtypes and
tuple variants.
([#&#8203;270](https://togithub.com/mitsuhiko/insta/issues/270))

###
[`v1.18.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1180)

-   `Settings::bind` now can return a result.
-   Expose the drop guard type of `bind_to_scope`.
- The `serde` dependency is now optional. While still enabled by default
users need to opt into `yaml` and `json` features explicitly to regain
    support for it. To avoid the default `serde` dependency the default
features just need to be disabled.
([#&#8203;255](https://togithub.com/mitsuhiko/insta/issues/255))
-   Deprecated unused `serialization` features.
-   Deprecated unused `backtrace` feature.
-   Removed deprecated `Settings::bind_to_thread`.

**Breaking Changes / Upgrading:** If you are upgrading to serde 1.18.0
you will
receive deprecating warnings if you are using the
`assert_yaml_snapshot!` and
`assert_json_snapshot!` macros. These macros will continue to function
in the
future but they will require explicit opting into the `yaml` and `json`
features.
To silence the warning add them to your `insta` dependency. Additionally
the
`backtrace` feature was deprecated. It is no longer needed so just
remove it.

###
[`v1.17.2`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1172)

-   Remove an accidentaly debug print output.

###
[`v1.17.1`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1171)

- Added support for nextest.
([#&#8203;242](https://togithub.com/mitsuhiko/insta/issues/242))
-   Resolved an issue where inline snapshot tests in doctests refused to
work. ([#&#8203;252](https://togithub.com/mitsuhiko/insta/issues/252))

###
[`v1.17.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1170)

- Fixed an issue in `cargo-insta` where sometimes accepting inline
snapshots
    would crash with an out of bounds panic.
- Added new `filters` feature.
([#&#8203;245](https://togithub.com/mitsuhiko/insta/issues/245))
- Disallow unnamed snapshots in doctests.
([#&#8203;246](https://togithub.com/mitsuhiko/insta/issues/246))
- `with_settings!` macro now inherits the former settings rather than
resetting.
([#&#8203;249](https://togithub.com/mitsuhiko/insta/issues/249))
-   Added support for `Settings::bind_to_scope` and deprecated
`Settings::bind_to_thread`.
([#&#8203;250](https://togithub.com/mitsuhiko/insta/issues/250))
-   Added support for `minimal-versions` builds.

###
[`v1.16.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1160)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.15.0...1.16.0)

-   Added `--no-quiet`/`-Q` flag to `cargo insta test` to suppress the
    quiet flag. This works around limitations with custom test harnesses
    such as cucumber.
-   Update RON to 0.7.1.
- Improved ergonomics around `with_settings!`. It's now a perfect match
to
    the settings object's setter methods.
- Added `description` and `info` to snapshots.
([#&#8203;239](https://togithub.com/mitsuhiko/insta/issues/239))
- Added `omit_expression` setting.
([#&#8203;239](https://togithub.com/mitsuhiko/insta/issues/239))
- Added improved support for running insta from doctests.
([#&#8203;243](https://togithub.com/mitsuhiko/insta/issues/243))

###
[`v1.15.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1150)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.14.1...1.15.0)

- Bump minimum version of Rust to 1.56.1. This was done because the used
    serde-yaml dependency no longer supports older versions of Rust.

###
[`v1.14.1`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1141)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.14.0...1.14.1)

- Update uuid crate to 1.0.0.
([#&#8203;228](https://togithub.com/mitsuhiko/insta/issues/228))
- Use inline block format also for strings of form `"foo\n"`.
([#&#8203;225](https://togithub.com/mitsuhiko/insta/issues/225))

###
[`v1.14.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1140)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.13.0...1.14.0)

-   Fixed a bug that caused insta to panic if inline snapshot assertions
moved since the time of the snapshot creation.
([#&#8203;220](https://togithub.com/mitsuhiko/insta/issues/220))
-   `cargo insta test` now returns non zero status code when snapshots
are left for review.
([#&#8203;222](https://togithub.com/mitsuhiko/insta/issues/222))
- Assertion failures now mention `cargo insta test`.
([#&#8203;223](https://togithub.com/mitsuhiko/insta/issues/223))

###
[`v1.13.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1130)

- Fixed a bug where an extra newline was emitted following the snapshot
header.
- `assertion_line` is no longer retained in snapshots.
([#&#8203;218](https://togithub.com/mitsuhiko/insta/issues/218))

###
[`v1.12.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1120)

- Add support for sorting redactions (`sorted_redaction` and
`Settings::sort_selector`).
([#&#8203;212](https://togithub.com/mitsuhiko/insta/issues/212))
- Changed snapshot name detection to no longer use thread names but
function names.
([#&#8203;213](https://togithub.com/mitsuhiko/insta/issues/213))

**Upgrade Notes:**

Insta used to detect the current test name by using the current thread
name. This
appeared to work well but unfortunately ran into various limitations. In
particular
in some cases the thread name was truncated, missing or did not point to
the current
test name. To better support different platforms and situations insta
now uses the
function name instead.

This however changes behavior. In particular if you are using a helper
function to
assert, a different snapshot name will now be used. You can work around
this issue
by using a helper macro instead or to explicitly pass a snapshot name in
such
situations.

###
[`v1.11.0`](https://togithub.com/mitsuhiko/insta/blob/HEAD/CHANGELOG.md#&#8203;1110)

[Compare
Source](https://togithub.com/mitsuhiko/insta/compare/1.10.0...1.11.0)

- Trim down some unnecessary dependencies and switch to `once_cell`.
([#&#8203;208](https://togithub.com/mitsuhiko/insta/issues/208))

</details>

<details>
<summary>rust-itertools/itertools</summary>

###
[`v0.10.5`](https://togithub.com/rust-itertools/itertools/blob/HEAD/CHANGELOG.md#&#8203;0105)

-   Maintenance

###
[`v0.10.4`](https://togithub.com/rust-itertools/itertools/blob/HEAD/CHANGELOG.md#&#8203;0104)

[Compare
Source](https://togithub.com/rust-itertools/itertools/compare/v0.10.3...v0.10.4)

- Add `EitherOrBoth::or` and `EitherOrBoth::or_else`
([#&#8203;593](https://togithub.com/rust-itertools/itertools/issues/593))
- Add `min_set`, `max_set` et al.
([#&#8203;613](https://togithub.com/rust-itertools/itertools/issues/613),
[#&#8203;323](https://togithub.com/rust-itertools/itertools/issues/323))
- Use `either/use_std`
([#&#8203;628](https://togithub.com/rust-itertools/itertools/issues/628))
- Documentation fixes
([#&#8203;612](https://togithub.com/rust-itertools/itertools/issues/612),
[#&#8203;625](https://togithub.com/rust-itertools/itertools/issues/625),
[#&#8203;632](https://togithub.com/rust-itertools/itertools/issues/632),
[#&#8203;633](https://togithub.com/rust-itertools/itertools/issues/633),
[#&#8203;634](https://togithub.com/rust-itertools/itertools/issues/634),
[#&#8203;638](https://togithub.com/rust-itertools/itertools/issues/638))
- Code maintenance
([#&#8203;623](https://togithub.com/rust-itertools/itertools/issues/623),
[#&#8203;624](https://togithub.com/rust-itertools/itertools/issues/624),
[#&#8203;627](https://togithub.com/rust-itertools/itertools/issues/627),
[#&#8203;630](https://togithub.com/rust-itertools/itertools/issues/630))

</details>

<details>
<summary>Yatekii/jep106</summary>

### [`v0.2.8`](https://togithub.com/Yatekii/jep106/releases/tag/v0.2.8):
0.2.8

[Compare
Source](https://togithub.com/Yatekii/jep106/compare/v0.2.7...v0.2.8)

-   Fix possible out-of-bounds access, which would have led to a panic.

### [`v0.2.7`](https://togithub.com/Yatekii/jep106/releases/tag/v0.2.7):
0.2.7

[Compare
Source](https://togithub.com/Yatekii/jep106/compare/v0.2.6...v0.2.7)

-   Updated codes to version JEP106BE, from January 2022.

</details>

<details>
<summary>rust-lang/log</summary>

###
[`v0.4.17`](https://togithub.com/rust-lang/log/blob/HEAD/CHANGELOG.md#&#8203;0417---2022-04-29)

-   Update `kv_unstable` internal dependencies.

</details>

<details>
<summary>rust-num/num-traits</summary>

###
[`v0.2.15`](https://togithub.com/rust-num/num-traits/blob/HEAD/RELEASES.md#Release-0215-2022-05-02)

[Compare
Source](https://togithub.com/rust-num/num-traits/compare/num-traits-0.2.14...num-traits-0.2.15)

- [The new `Euclid` trait calculates Euclidean division][195], where the
    remainder is always positive or zero.
- [The new `LowerBounded` and `UpperBounded` traits][210] separately
describe
types with lower and upper bounds. These traits are automatically
implemented
    for all fully-`Bounded` types.
- [The new `Float::copysign` method copies the sign of the
argument][207] to
    to the magnitude of `self`.
- [The new `PrimInt::leading_ones` and `trailing_ones` methods][205] are
the
    complement of the existing methods that count zero bits.
- [The new `PrimInt::reverse_bits` method reverses the order of all
bits][202]
    of a primitive integer.
- [Improved `Num::from_str_radix` for floats][201], also [ignoring
case][214].
- [`Float` and `FloatCore` use more from `libm`][196] when that is
enabled.

**Contributors**: [@&#8203;alion02](https://togithub.com/alion02),
[@&#8203;clarfonthey](https://togithub.com/clarfonthey),
[@&#8203;cuviper](https://togithub.com/cuviper),
[@&#8203;ElectronicRU](https://togithub.com/ElectronicRU),
[@&#8203;ibraheemdev](https://togithub.com/ibraheemdev),
[@&#8203;SparrowLii](https://togithub.com/SparrowLii),
[@&#8203;sshilovsky](https://togithub.com/sshilovsky),
[@&#8203;tspiteri](https://togithub.com/tspiteri),
[@&#8203;XAMPPRocky](https://togithub.com/XAMPPRocky),
[@&#8203;Xiretza](https://togithub.com/Xiretza)

[195]: https://togithub.com/rust-num/num-traits/pull/195

[196]: https://togithub.com/rust-num/num-traits/pull/196

[201]: https://togithub.com/rust-num/num-traits/pull/201

[202]: https://togithub.com/rust-num/num-traits/pull/202

[205]: https://togithub.com/rust-num/num-traits/pull/205

[207]: https://togithub.com/rust-num/num-traits/pull/207

[210]: https://togithub.com/rust-num/num-traits/pull/210

[214]: https://togithub.com/rust-num/num-traits/pull/214

###
[`v0.2.14`](https://togithub.com/rust-num/num-traits/blob/HEAD/RELEASES.md#Release-0214-2020-10-29)

[Compare
Source](https://togithub.com/rust-num/num-traits/compare/num-traits-0.2.13...num-traits-0.2.14)

-   Clarify the license specification as "MIT OR Apache-2.0".

**Contributors**: [@&#8203;cuviper](https://togithub.com/cuviper)

###
[`v0.2.13`](https://togithub.com/rust-num/num-traits/blob/HEAD/RELEASES.md#Release-0213-2020-10-29)

[Compare
Source](https://togithub.com/rust-num/num-traits/compare/num-traits-0.2.12...num-traits-0.2.13)

- [The new `OverflowingAdd`, `OverflowingSub`, and `OverflowingMul`
traits][180]
return a tuple with the operation result and a `bool` indicating
overflow.
- [The "i128" feature now overrides compiler probes for that
support][185].
This may fix scenarios where `autocfg` probing doesn't work properly.
- [Casts from large `f64` values to `f32` now saturate to
infinity][186]. They
previously returned `None` because that was once thought to be undefined
    behavior, but [rust#&#8203;15536] resolved that such casts are fine.
- [`Num::from_str_radix` documents requirements for radix support][192],
which
are now more relaxed than previously implied. It is suggested to accept
at
least `2..=36` without panicking, but `Err` may be returned otherwise.

**Contributors**: [@&#8203;cuviper](https://togithub.com/cuviper),
[@&#8203;Enet4](https://togithub.com/Enet4),
[@&#8203;KaczuH](https://togithub.com/KaczuH),
[@&#8203;martin-t](https://togithub.com/martin-t),
[@&#8203;newpavlov](https://togithub.com/newpavlov)

[180]: https://togithub.com/rust-num/num-traits/pull/180

[185]: https://togithub.com/rust-num/num-traits/pull/185

[186]: https://togithub.com/rust-num/num-traits/pull/186

[192]: https://togithub.com/rust-num/num-traits/issues/192

[rust#&#8203;15536]: https://togithub.com/rust-lang/rust/issues/15536

###
[`v0.2.12`](https://togithub.com/rust-num/num-traits/blob/HEAD/RELEASES.md#Release-0212-2020-06-11)

[Compare
Source](https://togithub.com/rust-num/num-traits/compare/num-traits-0.2.11...num-traits-0.2.12)

- [The new `WrappingNeg` trait][153] will wrap the result if it exceeds
the
    boundary of the type, e.g. `i32::MIN.wrapping_neg() == i32::MIN`.
- [The new `SaturatingAdd`, `SaturatingSub`, and `SaturatingMul`
traits][165]
will saturate at the numeric bounds if the operation would overflow.
These
soft-deprecate the existing `Saturating` trait that only has addition
and
    subtraction methods.
- [Added new constants for logarithms, `FloatConst::{LOG10_2,
LOG2_10}`][171].

**Contributors**: [@&#8203;cuviper](https://togithub.com/cuviper),
[@&#8203;ocstl](https://togithub.com/ocstl),
[@&#8203;trepetti](https://togithub.com/trepetti),
[@&#8203;vallentin](https://togithub.com/vallentin)

[153]: https://togithub.com/rust-num/num-traits/pull/153

[165]: https://togithub.com/rust-num/num-traits/pull/165

[171]: https://togithub.com/rust-num/num-traits/pull/171

</details>

<details>
<summary>gimli-rs/object</summary>

###
[`v0.30.3`](https://togithub.com/gimli-rs/object/blob/HEAD/CHANGELOG.md#&#8203;0303)

[Compare
Source](https://togithub.com/gimli-rs/object/compare/0.30.2...0.30.3)

Released 2023/01/23.

##### Added

-   Added `SectionKind::ReadOnlyDataWithRel` for writing.
    [#&#8203;504](https://togithub.com/gimli-rs/object/pull/504)

***

###
[`v0.30.2`](https://togithub.com/gimli-rs/object/blob/HEAD/CHANGELOG.md#&#8203;0302)

[Compare
Source](https://togithub.com/gimli-rs/object/compare/0.30.1...0.30.2)

Released 2023/01/11.

##### Added

-   Added more ELF constants for AVR flags and relocations.
    [#&#8203;500](https://togithub.com/gimli-rs/object/pull/500)

***

###
[`v0.30.1`](https://togithub.com/gimli-rs/object/blob/HEAD/CHANGELOG.md#&#8203;0301)

[Compare
Source](https://togithub.com/gimli-rs/object/compare/0.30.0...0.30.1)

Released 2023/01/04.

##### Changed

- Changed `read::ElfSymbol::kind` to handle `STT_NOTYPE` and
`STT_GNU_IFUNC`.
    [#&#8203;498](https://togithub.com/gimli-rs/object/pull/498)

##### Added

-   Added `read::CoffSymbol::raw_symbol`.
    [#&#8203;494](https://togithub.com/gimli-rs/object/pull/494)

-   Added ELF support for Solana Binary Format.
    [#&#8203;491](https://togithub.com/gimli-rs/object/pull/491)

-   Added ELF support for AArch64 ILP32.
    [#&#8203;497](https://togithub.com/gimli-rs/object/pull/497)

***

</details>

<details>
<summary>matklad/once_cell</summary>

###
[`v1.17.0`](https://togithub.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#&#8203;1170)

[Compare
Source](https://togithub.com/matklad/once_cell/compare/v1.16.0...v1.17.0)

-   Add `race::OnceRef` for storing a `&'a T`.

###
[`v1.16.0`](https://togithub.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#&#8203;1160)

[Compare
Source](https://togithub.com/matklad/once_cell/compare/v1.15.0...v1.16.0)

-   Add `no_std` implementation based on `critical-section`,
    [#&#8203;195](https://togithub.com/matklad/once_cell/pull/195).
- Deprecate `atomic-polyfill` feature (use the new `critical-section`
instead)

###
[`v1.15.0`](https://togithub.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#&#8203;1150)

[Compare
Source](https://togithub.com/matklad/once_cell/compare/v1.14.0...v1.15.0)

-   Increase minimal supported Rust version to 1.56.0.
-   Implement `UnwindSafe` even if the `std` feature is disabled.

###
[`v1.14.0`](https://togithub.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#&#8203;1140)

[Compare
Source](https://togithub.com/matklad/once_cell/compare/v1.13.1...v1.14.0)

-   Add extension to `unsync` and `sync` `Lazy` mut API:
    -   `force_mut`
    -   `get_mut`

###
[`v1.13.1`](https://togithub.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#&#8203;1131)

[Compare
Source](https://togithub.com/matklad/once_cell/compare/v1.13.0...v1.13.1)

- Make implementation compliant with [strict
provenance](https://togithub.com/rust-lang/rust/issues/95228).
-   Upgrade `atomic-polyfill` to `1.0`

###
[`v1.13.0`](https://togithub.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#&#8203;1130)

[Compare
Source](https://togithub.com/matklad/once_cell/compare/v1.12.1...v1.13.0)

-   Add `Lazy::get`, similar to `OnceCell::get`.

###
[`v1.12.1`](https://togithub.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#&#8203;1121)

[Compare
Source](https://togithub.com/matklad/once_cell/compare/v1.12.0...v1.12.1)

-   Remove incorrect `debug_assert`.

###
[`v1.12.0`](https://togithub.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#&#8203;1120)

[Compare
Source](https://togithub.com/matklad/once_cell/compare/v1.11.0...v1.12.0)

-   Add `OnceCell::wait`, a blocking variant of `get`.

###
[`v1.11.0`](https://togithub.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#&#8203;1110)

[Compare
Source](https://togithub.com/matklad/once_cell/compare/v1.10.0...v1.11.0)

- Add `OnceCell::with_value` to create initialized `OnceCell` in `const`
context.
-   Improve `Clone` implementation for `OnceCell`.
- Rewrite `parking_lot` version on top of `parking_lot_core`, for even
smaller cells!

###
[`v1.10.0`](https://togithub.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#&#8203;1100)

[Compare
Source](https://togithub.com/matklad/once_cell/compare/v1.9.0...v1.10.0)

- upgrade `parking_lot` to `0.12.0` (note that this bumps MSRV with
`parking_lot` feature enabled to `1.49.0`).

###
[`v1.9.0`](https://togithub.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#&#8203;190)

[Compare
Source](https://togithub.com/matklad/once_cell/compare/v1.8.0...v1.9.0)

- Added an `atomic-polyfill` optional dependency to compile `race` on
platforms without atomics

###
[`v1.8.0`](https://togithub.com/matklad/once_cell/blob/HEAD/CHANGELOG.md#&#8203;180)

[Compare
Source](https://togithub.com/matklad/once_cell/compare/v1.7.2...v1.8.0)

-   Add `try_insert` API -- a version of `set` that returns a reference.

</details>

<details>
<summary>assert-rs/predicates-rs</summary>

###
[`v2.1.5`](https://togithub.com/assert-rs/predicates-rs/blob/HEAD/CHANGELOG.md#&#8203;215---2022-12-29)

[Compare
Source](https://togithub.com/assert-rs/predicates-rs/compare/v2.1.4...v2.1.5)

##### Gixes

-   Further generalized borrowing of predicates with `Borrow` trait

###
[`v2.1.4`](https://togithub.com/assert-rs/predicates-rs/blob/HEAD/CHANGELOG.md#&#8203;214---2022-12-02)

[Compare
Source](https://togithub.com/assert-rs/predicates-rs/compare/v2.1.3...v2.1.4)

###
[`v2.1.3`](https://togithub.com/assert-rs/predicates-rs/blob/HEAD/CHANGELOG.md#&#8203;213---2022-11-13)

[Compare
Source](https://togithub.com/assert-rs/predicates-rs/compare/v2.1.2...v2.1.3)

###
[`v2.1.2`](https://togithub.com/assert-rs/predicates-rs/blob/HEAD/CHANGELOG.md#&#8203;212---2022-11-05)

[Compare
Source](https://togithub.com/assert-rs/predicates-rs/compare/v2.1.1...v2.1.2)

##### Compatibility

Update MSRV to 1.60

##### Fixes

-   Hide internal-only optional dependencies

</details>

<details>
<summary>rust-random/rand</summary>

###
[`v0.8.5`](https://togithub.com/rust-random/rand/blob/HEAD/CHANGELOG.md#&#8203;085---2021-08-20)

[Compare
Source](https://togithub.com/rust-random/rand/compare/0.8.4...0.8.5)

##### Fixes

- Fix build on non-32/64-bit architectures
([#&#8203;1144](https://togithub.com/rust-random/rand/issues/1144))
- Fix "min_const_gen" feature for `no_std`
([#&#8203;1173](https://togithub.com/rust-random/rand/issues/1173))
- Check `libc::pthread_atfork` return value with panic on error
([#&#8203;1178](https://togithub.com/rust-random/rand/issues/1178))
- More robust reseeding in case `ReseedingRng` is used from a fork
handler
([#&#8203;1178](https://togithub.com/rust-random/rand/issues/1178))
- Fix nightly: remove unused `slice_partition_at_index` feature
([#&#8203;1215](https://togithub.com/rust-random/rand/issues/1215))
- Fix nightly + `simd_support`: update `packed_simd`
([#&#8203;1216](https://togithub.com/rust-random/rand/issues/1216))

##### Rngs

- `StdRng`: Switch from HC128 to ChaCha12 on emscripten
([#&#8203;1142](https://togithub.com/rust-random/rand/issues/1142)).
    We now use ChaCha12 on all platforms.

##### Documentation

- Added docs about rand's use of const generics
([#&#8203;1150](https://togithub.com/rust-random/rand/issues/1150))
- Better random chars example
([#&#8203;1157](https://togithub.com/rust-random/rand/issues/1157))

###
[`v0.8.4`](https://togithub.com/rust-random/rand/blob/HEAD/CHANGELOG.md#&#8203;084---2021-06-15)

[Compare
Source](https://togithub.com/rust-random/rand/compare/0.8.3...0.8.4)

##### Additions

- Use const-generics to support arrays of all sizes
([#&#8203;1104](https://togithub.com/rust-random/rand/issues/1104))
- Implement `Clone` and `Copy` for `Alphanumeric`
([#&#8203;1126](https://togithub.com/rust-random/rand/issues/1126))
- Add `Distribution::map` to derive a distribution using a closure
([#&#8203;1129](https://togithub.com/rust-random/rand/issues/1129))
- Add `Slice` distribution
([#&#8203;1107](https://togithub.com/rust-random/rand/issues/1107))
- Add `DistString` trait with impls for `Standard` and `Alphanumeric`
([#&#8203;1133](https://togithub.com/rust-random/rand/issues/1133))

##### Other

- Reorder asserts in `Uniform` float distributions for easier debugging
of non-finite arguments
([#&#8203;1094](https://togithub.com/rust-random/rand/issues/1094),
[#&#8203;1108](https://togithub.com/rust-random/rand/issues/1108))
- Add range overflow check in `Uniform` float distributions
([#&#8203;1108](https://togithub.com/rust-random/rand/issues/1108))
- Deprecate `rngs::adapter::ReadRng`
([#&#8203;1130](https://togithub.com/rust-random/rand/issues/1130))

###
[`v0.8.3`](https://togithub.com/rust-random/rand/blob/HEAD/CHANGELOG.md#&#8203;083---2021-01-25)

[Compare
Source](https://togithub.com/rust-random/rand/compare/0.8.2...0.8.3)

##### Fixes

- Fix `no-std` + `alloc` build by gating `choose_multiple_weighted` on
`std`
([#&#8203;1088](https://togithub.com/rust-random/rand/issues/1088))

###
[`v0.8.2`](https://togithub.com/rust-random/rand/blob/HEAD/CHANGELOG.md#&#8203;082---2021-01-12)

[Compare
Source](https://togithub.com/rust-random/rand/compare/0.8.1...0.8.2)

##### Fixes

- Fix panic in `UniformInt::sample_single_inclusive` and
`Rng::gen_range` when
providing a full integer range (eg `0..=MAX`)
([#&#8203;1087](https://togithub.com/rust-random/rand/issues/1087))

###
[`v0.8.1`](https://togithub.com/rust-random/rand/blob/HEAD/CHANGELOG.md#&#8203;081---2020-12-31)

[Compare
Source](https://togithub.com/rust-random/rand/compare/0.8.0...0.8.1)

##### Other

- Enable all stable features in the playground
([#&#8203;1081](https://togithub.com/rust-random/rand/issues/1081))

</details>

<details>
<summary>seanmonstar/reqwest</summary>

###
[`v0.11.14`](https://togithub.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v01114)

[Compare
Source](https://togithub.com/seanmonstar/reqwest/compare/v0.11.13...v0.11.14)

- Adds `Proxy::no_proxy(url)` that works like the NO_PROXY environment
variable.
- Adds `multipart::Part::headers(headers)` method to add custom headers.
-   (wasm) Add `Response::bytes_stream()`.
- Perf: several internal optimizations reducing copies and memory
allocations.

###
[`v0.11.13`](https://togithub.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v01113)

[Compare
Source](https://togithub.com/seanmonstar/reqwest/compare/v0.11.12...v0.11.13)

-   Add `ClientBuilder::dns_resolver()` option for custom DNS resolvers.
- Add `ClientBuilder::tls_sni(bool)` option to enable or disable TLS
Server Name Indication.
- Add `Identity::from_pkcs8_pem()` constructor when using `native-tls`.
-   Fix `redirect::Policy::limited(0)` from following any redirects.

###
[`v0.11.12`](https://togithub.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v01112)

[Compare
Source](https://togithub.com/seanmonstar/reqwest/compare/v0.11.11...v0.11.12)

- Add `ClientBuilder::resolve_to_addrs()` which allows a slice of IP
addresses to be specified for a single host.
- Add `Response::upgrade()` to await whether the server agrees to an
HTTP upgrade.

###
[`v0.11.11`](https://togithub.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v01111)

[Compare
Source](https://togithub.com/seanmonstar/reqwest/compare/v0.11.10...v0.11.11)

-   Add HTTP/2 keep-alive configuration methods on `ClientBuilder`.
- Add
`ClientBuilder::http1_allow_obsolete_multiline_headers_in_responses()`.
-   Add `impl Service<Request>` for `Client` and `&'_ Client`.
-   (wasm) Add `RequestBuilder::basic_auth()`.
- Fix `RequestBuilder::header` to not override `sensitive` if user
explicitly set on a `HeaderValue`.
-   Fix rustls parsing of elliptic curve private keys.
-   Fix Proxy URL parsing of some invalid targets.

</details>

<details>
<summary>kkawakam/rustyline</summary>

###
[`v10.1.1`](https://togithub.com/kkawakam/rustyline/releases/tag/v10.1.1):
10.1.1

[Compare
Source](https://togithub.com/kkawakam/rustyline/compare/v10.1.0...v10.1.1)

Rollbacks incompatible changes relative to edition 2018
([#&#8203;671](https://togithub.com/kkawakam/rustyline/issues/671))
**Full Changelog**:
https://github.com/kkawakam/rustyline/compare/v10.1.0...v10.1.1

###
[`v10.1.0`](https://togithub.com/kkawakam/rustyline/releases/tag/v10.1.0):
10.1.0

[Compare
Source](https://togithub.com/kkawakam/rustyline/compare/v10.0.0...v10.1.0)

#### What's Changed

-   Upgrade nix dependency
- Fix ViFirstPrint movement
([#&#8203;645](https://togithub.com/kkawakam/rustyline/issues/645))
- Specify that `Editor::iter` ends at EOF (Fix
[#&#8203;647](https://togithub.com/kkawakam/rustyline/issues/647))
- Optim: do nothing on SIGWINCH if screen size doesn't impact current
layout
-   Upgrade skim dependency

**Full Changelog**:
https://github.com/kkawakam/rustyline/compare/v10.0.0...v10.1.0

</details>

<details>
<summary>getsentry/sentry-rust</summary>

###
[`v0.29.2`](https://togithub.com/getsentry/sentry-rust/blob/HEAD/CHANGELOG.md#&#8203;0292)

[Compare
Source](https://togithub.com/getsentry/sentry-rust/compare/0.29.1...0.29.2)

##### Various fixes & improvements

- fix: Prefer `match_pattern` over `match_name` in actix
([#&#8203;539](https://togithub.com/getsentry/sentry-rust/issues/539))
by [@&#8203;wuerges](https://togithub.com/wuerges)
- feat(profiling): Add profile context to transaction.
([#&#8203;538](https://togithub.com/getsentry/sentry-rust/issues/538))
by [@&#8203;viglia](https://togithub.com/viglia)
- Re-disable scheduled jobs on forks
([#&#8203;537](https://togithub.com/getsentry/sentry-rust/issues/537))
by [@&#8203;MarijnS95](https://togithub.com/MarijnS95)
- fix: Avoid Deadlock popping ScopeGuards out of order
([#&#8203;536](https://togithub.com/getsentry/sentry-rust/issues/536))
by [@&#8203;Swatinem](https://togithub.com/Swatinem)
- sentry-core: make TraceContext publicly readable
([#&#8203;534](https://togithub.com/getsentry/sentry-rust/issues/534))
by [@&#8203;tommilligan](https://togithub.com/tommilligan)
- sentry-core: make TransactionContext.trace_id readable
([#&#8203;533](https://togithub.com/getsentry/sentry-rust/issues/533))
by [@&#8203;tommilligan](https://togithub.com/tommilligan)
- docs: fix outdated `native-tls`/`rustls` info in README
([#&#8203;535](https://togithub.com/getsentry/sentry-rust/issues/535))
by [@&#8203;seritools](https://togithub.com/seritools)
- features: Make `tower-http` enable the `tower` feature
([#&#8203;532](https://togithub.com/getsentry/sentry-rust/issues/532))
by [@&#8203;Turbo87](https://togithub.com/Turbo87)

###
[`v0.29.1`](https://togithub.com/getsentry/sentry-rust/blob/HEAD/CHANGELOG.md#&#8203;0291)

[Compare
Source](https://togithub.com/getsentry/sentry-rust/compare/0.29.0...0.29.1)

**Features**:

- Users of `TransactionContext` may now add `custom` context to it. This
may be used by `traces_sampler` to decide sampling rates on a
per-transaction basis.
([#&#8203;512](https://togithub.com/getsentry/sentry-rust/pull/512))

**Fixes**:

- Correctly strip crates hashes for v0 symbol mangling.
([#&#8203;525](https://togithub.com/getsentry/sentry-rust/pull/525))

**Internal**:

- Simplify `Hub::run` and `SentryFuture` by using a scope-guard for
`Hub` switching.
([#&#8203;524](https://togithub.com/getsentry/sentry-rust/pull/524),
[#&#8203;529](https://togithub.com/getsentry/sentry-rust/pull/529))

**Thank you**:

Features, fixes and improvements in this release have been contributed
by:

-   [@&#8203;tommilligan](https://togithub.com/tommilligan)

</details>

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

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

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

-   Documentation improvements

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

[Compare
Source](https://togithub.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://togithub.com/serde-rs/serde/issues/2344))

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

[Compare
Source](https://togithub.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://togithub.com/serde-rs/serde/issues/2334))
- Enable `Serialize` and `Deserialize` impls of `std::sync::atomic`
types on more platforms
([#&#8203;2337](https://togithub.com/serde-rs/serde/issues/2337), thanks
[@&#8203;badboy](https://togithub.com/badboy))

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

[Compare
Source](https://togithub.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://togithub.com/serde-rs/serde/issues/2333), thanks
[@&#8203;jonasbb](https://togithub.com/jonasbb))

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

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

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

</details>

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

### [`v1.0.91`](https://togithub.com/serde-rs/json/releases/tag/v1.0.91)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.90...v1.0.91)

-   Opt out of `-Zrustdoc-scrape-examples` on docs.rs for now

### [`v1.0.90`](https://togithub.com/serde-rs/json/releases/tag/v1.0.90)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.89...v1.0.90)

-   Documentation improvements

### [`v1.0.89`](https://togithub.com/serde-rs/json/releases/tag/v1.0.89)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.88...v1.0.89)

- Fix invalid JSON incorrectly accepted when a large number has no
digits after decimal point
([#&#8203;953](https://togithub.com/serde-rs/json/issues/953))

### [`v1.0.88`](https://togithub.com/serde-rs/json/releases/tag/v1.0.88)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.87...v1.0.88)

- Optimize serde_json::Map's implementation of `append` and `clone_from`
([#&#8203;952](https://togithub.com/serde-rs/json/issues/952), thanks
[@&#8203;Lucretiel](https://togithub.com/Lucretiel))

### [`v1.0.87`](https://togithub.com/serde-rs/json/releases/tag/v1.0.87)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.86...v1.0.87)

- Add `write_i128` and `write_u128` methods to `serde_json::Formatter`
to control the formatting of 128-bit integers
([#&#8203;940](https://togithub.com/serde-rs/json/issues/940), thanks
[@&#8203;Lucretiel](https://togithub.com/Lucretiel))

### [`v1.0.86`](https://togithub.com/serde-rs/json/releases/tag/v1.0.86)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.85...v1.0.86)

- Support `arbitrary_precision` feature even in no-std mode
([#&#8203;928](https://togithub.com/serde-rs/json/issues/928), thanks
[@&#8203;kvinwang](https://togithub.com/kvinwang))

### [`v1.0.85`](https://togithub.com/serde-rs/json/releases/tag/v1.0.85)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.84...v1.0.85)

- Make `Display` for `Number` produce the same representation as
serializing
([#&#8203;919](https://togithub.com/serde-rs/json/issues/919))

### [`v1.0.84`](https://togithub.com/serde-rs/json/releases/tag/v1.0.84)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.83...v1.0.84)

- Make `Debug` impl of `serde_json::Value` more compact
([#&#8203;918](https://togithub.com/serde-rs/json/issues/918))

### [`v1.0.83`](https://togithub.com/serde-rs/json/releases/tag/v1.0.83)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.82...v1.0.83)

-   Add categories to crates.io metadata

### [`v1.0.82`](https://togithub.com/serde-rs/json/releases/tag/v1.0.82)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.81...v1.0.82)

- Implement `From<Option<T>>` for serde_json::Value where `T:
Into<Value>`
([#&#8203;900](https://togithub.com/serde-rs/json/issues/900), thanks
[@&#8203;kvnvelasco](https://togithub.com/kvnvelasco))

### [`v1.0.81`](https://togithub.com/serde-rs/json/releases/tag/v1.0.81)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.80...v1.0.81)

- Work around `indexmap`/`autocfg` not always properly detecting whether
a `std` sysroot crate is available
([#&#8203;885](https://togithub.com/serde-rs/json/issues/885), thanks
[@&#8203;cuviper](https://togithub.com/cuviper))

### [`v1.0.80`](https://togithub.com/serde-rs/json/releases/tag/v1.0.80)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.79...v1.0.80)

-   Documentation improvements

### [`v1.0.79`](https://togithub.com/serde-rs/json/releases/tag/v1.0.79)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.78...v1.0.79)

- Allow `RawValue` deserialization to propagate `\u` escapes for
unmatched surrogates, which can later by deserialized to Vec\<u8>
([#&#8203;830](https://togithub.com/serde-rs/json/issues/830), thanks
[@&#8203;lucacasonato](https://togithub.com/lucacasonato))

### [`v1.0.78`](https://togithub.com/serde-rs/json/releases/tag/v1.0.78)

[Compare
Source](https://togithub.com/serde-rs/json/compare/v1.0.77...v1.0.78)

- Support deserializing as `&RawValue` in map key position, which would
previously fail with *"invalid type: newtype struct"*
([#&#8203;851](https://togithub.com/serde-rs/json/issues/851))

### [`v1.0.77`](https://togithub.com/serde-rs/json/releases/tag/v1.0.77)

[Compare Source](https://togithub.com/serde-rs/json/comp

</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.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/probe-rs/probe-rs).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xMTcuMSIsInVwZGF0ZWRJblZlciI6IjM0LjExNy4xIn0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@nrc
Copy link
Member

nrc commented Feb 22, 2023

An easier solution would be to rename Error::provide. At one point it was provide_context and we should be able to find some other name for it.

@drmason13
Copy link

For what it's worth, provide_context feels like a good name for this method to me.

Sure it's longer but it's more clear that it's about the error providing some sort of context to a user that comes from the concrete error type.

Whereas a plain provide had me thinking "provide what?".

@jyn514
Copy link
Member

jyn514 commented May 16, 2023

An immediate remedy would also be to rename Error::provide.
The error_generic_member_access RFC and the dyno/provide_any RFC were already using Error::provide_context instead of Error::provide in their examples.
I'd gladly create a PR to change the name if there are no objections.

@JonasJebing that sounds great! do you have time to follow up on that? :)

@waynr
Copy link
Contributor

waynr commented Jul 15, 2023

FYI for anyone subscribed to this issue hasn't been following #96024 or #113464 - I have volunteered to take on this issue to see what i can do to help push the generic member access work forward.

Next steps for this issue include:

@waynr
Copy link
Contributor

waynr commented Jul 15, 2023

@rustbot claim

@yaahc
Copy link
Member Author

yaahc commented Jul 18, 2023

  • @yaahc is it possible for you to give me edit permissions for the description on this issue so i can keep the steps/history section updated? or should i just ping you whenever i need it updated? or maybe it would be simpler to open a new tracking issue?

Not that I know of. The only way I can think of is via team membership since I think permissions are set up so that team members can usually edit any comments in the repo, for instance, I can edit your reply in this issue for whatever reason...

Feel free to just ping me (zulip works best), I'll start by grabbing the next steps you added and vendoring them into the top level comment.

Edit: alright, I've gone ahead and edited the todolist on the issue. Not sure if the provide_context rename is still relevant, lmk either way.

@waynr
Copy link
Contributor

waynr commented Jul 29, 2023

Feel free to just ping me (zulip works best), I'll start by grabbing the next steps you added and vendoring them into the top level comment.

Thanks! I'm just starting to take a look at all this again today after neglecting it the past week or so, starting with a PR to thiserror: dtolnay/thiserror#243

My next step is to see if I can make use of my thiserror PR branch to fix the rust builds that were failing on thiserror builds.

One thing I'm a little confused about is that thiserror does have a build.rs probe that should already prevent any of the Provider behavior from being included in builds if the probe code fails: https://github.com/waynr/thiserror/blob/543e1237d600949398a7c2e301722ce63cabbd95/build.rs#L22

So maybe my thiserror PR isn't actually necessary anyway? I'll dedicate more time this weekend or early next week to figure it out.

@waynr
Copy link
Contributor

waynr commented Jul 29, 2023

@yaahc updates for the task list in this issue:

DONE items:

UPDATED items:

NEW items:

  • LLVM is unable to optimize multiple .provide_* calls into a switch table because each call fetches the type id from Erased::type_id separately each time and the compiler doesn't know that these calls all return the same value. This should be fixed. See Add provide_any module to core rfcs#3192 (comment) for one possible solution (although alternative solutions may be possible).
    • leftover from the provide_any tracking issue task list, i haven't yet taken the time to try my hand at fixing this

To be clear about where I'm coming from, I haven't exhaustively read the entire history on the provide_any tracking issue but I did skim and ignored a lot of the discussion centering around the Provider trait since the libs team has decided to leave that out.

@waynr
Copy link
Contributor

waynr commented Jul 29, 2023

Also worth mentioning for discussion here is that at least one person has expressed a preference for using the name Demand rather than Request because of the potential for Request to be confused with, for example, the concept of an HTTP request: #113464 (comment)

I'll ultimately go either way on this one to be honest (though I really don't like Demand), but I do have a third alternative: Query

Similar to Request, Query might be semantically confused with database queries, but it seems less likely to me and it retains the spirit of requesting vs demanding a value - in my view, if a demand isn't met that is more akin to an error than the None response we are going for.

@waynr
Copy link
Contributor

waynr commented Aug 30, 2023

For everyone's information, this comment is going to be the new status comment for this tracking issue while it's assigned to me. The high-level status here is that most feedback has been addressed, including merging what remains of provide_any into this tracking issue / feature.

Steps / History

wbinnssmith added a commit to vercel/turborepo that referenced this issue Sep 22, 2023
This:

- Updates to the latest api change for `StdError` in `error_generic_member_access` rust-lang/rust#99301
- Updates `pathfinder_simd` for compatiblity
- Updates other crates for compatibility with Next.js
wbinnssmith added a commit to vercel/next.js that referenced this issue Sep 22, 2023
This:

- Updates to the latest api change for `StdError` in `error_generic_member_access` rust-lang/rust#99301
- Updates `pathfinder_simd` for compatiblity
wbinnssmith added a commit to vercel/turborepo that referenced this issue Sep 22, 2023
This:

- Updates to the latest api change for `StdError` in
`error_generic_member_access` rust-lang/rust#99301
- Updates `pathfinder_simd` for compatiblity
- Updates other crates for compatibility with Next.js


Closes WEB-1635
kodiakhq bot pushed a commit to vercel/next.js that referenced this issue Sep 22, 2023
This:

- Updates to the latest api change for `StdError` in `error_generic_member_access` rust-lang/rust#99301
- Updates `pathfinder_simd` for compatiblity


Closes WEB-1636
Zertsov pushed a commit to vercel/turborepo that referenced this issue Sep 27, 2023
This:

- Updates to the latest api change for `StdError` in
`error_generic_member_access` rust-lang/rust#99301
- Updates `pathfinder_simd` for compatiblity
- Updates other crates for compatibility with Next.js


Closes WEB-1635
thomcc pushed a commit to tcdi/postgrestd that referenced this issue Oct 17, 2023
core/any: remove Provider trait, rename Demand to Request

This touches on two WIP features:

* `error_generic_member_access`
  * tracking issue: rust-lang/rust#99301
  * RFC (WIP): rust-lang/rfcs#2895
* `provide_any`
  * tracking issue: rust-lang/rust#96024
  * RFC: rust-lang/rfcs#3192

The changes in this PR are intended to address libs meeting feedback summarized by `@Amanieu` in rust-lang/rust#96024 (comment)

The specific items this PR addresses so far are:

> We feel that the names "demand" and "request" are somewhat synonymous and would like only one of those to be used for better consistency.

I went with `Request` here since it sounds nicer, but I'm mildly concerned that at first glance it could be confused with the use of the word in networking context.

> The Provider trait should be deleted and its functionality should be merged into Error. We are happy to only provide an API that is only usable with Error. If there is demand for other uses then this can be provided through an external crate.

The net impact this PR has is that examples which previously looked like
```
    core::any::request_ref::<String>(&err).unwramp()
```

now look like
```
    (&err as &dyn core::error::Error).request_value::<String>().unwrap()
```

These are methods that based on the type hint when called return an `Option<T>` of that type. I'll admit I don't fully understand how that's done, but it involves `core::any::tags::Type` and `core::any::TaggedOption`, neither of which are exposed in the public API, to construct a `Request` which is then passed to the `Error.provide` method.

Something that I'm curious about is whether or not they are essential to the use of `Request` types (prior to this PR referred to as `Demand`) and if so does the fact that they are kept private imply that `Request`s are only meant to be constructed privately within the standard library? That's what it looks like to me.

These methods ultimately call into code that looks like:
```
/// Request a specific value by tag from the `Error`.
fn request_by_type_tag<'a, I>(err: &'a (impl Error + ?Sized)) -> Option<I::Reified>
where
    I: tags::Type<'a>,
{
    let mut tagged = core::any::TaggedOption::<'a, I>(None);
    err.provide(tagged.as_request());
    tagged.0
}
```

As far as the `Request` API is concerned, one suggestion I would like to make is that the previous example should look more like this:
```
/// Request a specific value by tag from the `Error`.
fn request_by_type_tag<'a, I>(err: &'a (impl Error + ?Sized)) -> Option<I::Reified>
where
    I: tags::Type<'a>,
{
    let tagged_request = core::any::Request<I>::new_tagged();
    err.provide(tagged_request);
    tagged.0
}
```
This makes it possible for anyone to construct a `Request` for use in their own projects without exposing an implementation detail like `TaggedOption` in the API surface.

Otherwise noteworthy is that I had to add `pub(crate)` on both `core::any::TaggedOption` and `core::any::tags` since `Request`s now need to be constructed in the `core::error` module. I considered moving `TaggedOption` into the `core::error` module but again I figured it's an implementation detail of `Request` and belongs closer to that.

At the time I am opening this PR, I have not yet looked into the following bit of feedback:

> We took a look at the generated code and found that LLVM is unable to optimize multiple .provide_* calls into a switch table because each call fetches the type id from Erased::type_id separately each time and the compiler doesn't know that these calls all return the same value. This should be fixed.

This is what I'll focus on next while waiting for feedback on the progress so far. I suspect that learning more about the type IDs will help me understand the need for `TaggedOption` a little better.
@WesleyAC
Copy link

Hi! Just wanted to check in on the status of this issue, and if @waynr is still shepherding this.

Is the optimization of multiple provide calls into a jump table a blocker for this? And is it the only blocker? Is implementing the solution discussed here for core::error::Request something that's being considered anywhere?

@waynr
Copy link
Contributor

waynr commented Feb 26, 2024

I haven't been a very good shepherd of this, but it has been on my mind as something I want to come back to. Part of the reason I haven't continued working on it is that the last discussion I participated in made it feel pretty well beyond my type system metaprogramming skills (see https://rust-lang.zulipchat.com/#narrow/stream/219381-t-libs/topic/error_generic_member_access).

workingjubilee added a commit to workingjubilee/rustc that referenced this issue Jun 12, 2024
Simplify provider api to improve llvm ir

This PR seeks to resolve the last concern in rust-lang#99301 (comment)

We resolve the issue by moving the type_id to be stored in the `Request` itself rather than being accessed through the `Erased` trait, letting the compiler infer that the value of the type id will not change between lookups.

### LLVM Codegen

**Before**

```
; <provider_test::MyError as core::error::Error>::provide
; Function Attrs: nonlazybind uwtable
define void `@"_ZN61_$LT$provider_test..MyError$u20$as$u20$core..error..Error$GT$7provide17hd9c9de412063aa73E"(ptr` noalias nocapture noundef nonnull readonly align 1 %self, ptr noundef nonnull align 1 %request.0, ptr noalias nocapture noundef readonly align 8 dereferenceable(32) %request.1) unnamed_addr #0 personality ptr `@rust_eh_personality` {
start:
  %0 = getelementptr inbounds i8, ptr %request.1, i64 24
  %self.1.val.i = load ptr, ptr %0, align 8
  %1 = tail call { i64, i64 } %self.1.val.i(ptr noundef nonnull align 1 %request.0), !noalias !15
  %2 = extractvalue { i64, i64 } %1, 0
  %3 = extractvalue { i64, i64 } %1, 1
  %_18.i.i = icmp ne i64 %2, 1101338453689927725
  %_2.i.i = icmp ne i64 %3, 472224167662714873
  %or.cond.i.not.i = select i1 %_18.i.i, i1 true, i1 %_2.i.i
  br i1 %or.cond.i.not.i, label %_ZN4core5error7Request7provide17h8f8125d2543333e0E.exit, label %bb2.i
```

**After**

```
; <provider_test::MyError as provider_test::Error>::provide
; Function Attrs: mustprogress nofree norecurse nosync nounwind nonlazybind willreturn memory(argmem: readwrite) uwtable
define void `@"_ZN63_$LT$provider_test..MyError$u20$as$u20$provider_test..Error$GT$7provide17h5bbf091795a6d359E"(ptr` noalias nocapture noundef nonnull readonly align 1 %self, ptr nocapture noundef nonnull align 8 %request.0, ptr noalias nocapture noundef readonly align 8 dereferenceable(24) %request.1) unnamed_addr rust-lang#2 personality ptr `@rust_eh_personality` {
start:
  %_19.i = load i64, ptr %request.0, align 8, !noalias !3, !noundef !3
  switch i64 %_19.i, label %_ZN13provider_test7Request7provide17heb3ee140962e3b2fE.exit [
    i64 7665305208997882008, label %bb12.i
    i64 7050211241160863540, label %bb12.i3
    i64 9112786072622981063, label %bb12.i11
  ]
```
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this issue Jun 12, 2024
Simplify provider api to improve llvm ir

This PR seeks to resolve the last concern in rust-lang#99301 (comment)

We resolve the issue by moving the type_id to be stored in the `Request` itself rather than being accessed through the `Erased` trait, letting the compiler infer that the value of the type id will not change between lookups.

### LLVM Codegen

**Before**

```
; <provider_test::MyError as core::error::Error>::provide
; Function Attrs: nonlazybind uwtable
define void `@"_ZN61_$LT$provider_test..MyError$u20$as$u20$core..error..Error$GT$7provide17hd9c9de412063aa73E"(ptr` noalias nocapture noundef nonnull readonly align 1 %self, ptr noundef nonnull align 1 %request.0, ptr noalias nocapture noundef readonly align 8 dereferenceable(32) %request.1) unnamed_addr #0 personality ptr `@rust_eh_personality` {
start:
  %0 = getelementptr inbounds i8, ptr %request.1, i64 24
  %self.1.val.i = load ptr, ptr %0, align 8
  %1 = tail call { i64, i64 } %self.1.val.i(ptr noundef nonnull align 1 %request.0), !noalias !15
  %2 = extractvalue { i64, i64 } %1, 0
  %3 = extractvalue { i64, i64 } %1, 1
  %_18.i.i = icmp ne i64 %2, 1101338453689927725
  %_2.i.i = icmp ne i64 %3, 472224167662714873
  %or.cond.i.not.i = select i1 %_18.i.i, i1 true, i1 %_2.i.i
  br i1 %or.cond.i.not.i, label %_ZN4core5error7Request7provide17h8f8125d2543333e0E.exit, label %bb2.i
```

**After**

```
; <provider_test::MyError as provider_test::Error>::provide
; Function Attrs: mustprogress nofree norecurse nosync nounwind nonlazybind willreturn memory(argmem: readwrite) uwtable
define void `@"_ZN63_$LT$provider_test..MyError$u20$as$u20$provider_test..Error$GT$7provide17h5bbf091795a6d359E"(ptr` noalias nocapture noundef nonnull readonly align 1 %self, ptr nocapture noundef nonnull align 8 %request.0, ptr noalias nocapture noundef readonly align 8 dereferenceable(24) %request.1) unnamed_addr #2 personality ptr `@rust_eh_personality` {
start:
  %_19.i = load i64, ptr %request.0, align 8, !noalias !3, !noundef !3
  switch i64 %_19.i, label %_ZN13provider_test7Request7provide17heb3ee140962e3b2fE.exit [
    i64 7665305208997882008, label %bb12.i
    i64 7050211241160863540, label %bb12.i3
    i64 9112786072622981063, label %bb12.i11
  ]
```
rust-timer added a commit to rust-lang-ci/rust that referenced this issue Jun 12, 2024
Rollup merge of rust-lang#126242 - yaahc:simplify-provider, r=jhpratt

Simplify provider api to improve llvm ir

This PR seeks to resolve the last concern in rust-lang#99301 (comment)

We resolve the issue by moving the type_id to be stored in the `Request` itself rather than being accessed through the `Erased` trait, letting the compiler infer that the value of the type id will not change between lookups.

### LLVM Codegen

**Before**

```
; <provider_test::MyError as core::error::Error>::provide
; Function Attrs: nonlazybind uwtable
define void `@"_ZN61_$LT$provider_test..MyError$u20$as$u20$core..error..Error$GT$7provide17hd9c9de412063aa73E"(ptr` noalias nocapture noundef nonnull readonly align 1 %self, ptr noundef nonnull align 1 %request.0, ptr noalias nocapture noundef readonly align 8 dereferenceable(32) %request.1) unnamed_addr #0 personality ptr `@rust_eh_personality` {
start:
  %0 = getelementptr inbounds i8, ptr %request.1, i64 24
  %self.1.val.i = load ptr, ptr %0, align 8
  %1 = tail call { i64, i64 } %self.1.val.i(ptr noundef nonnull align 1 %request.0), !noalias !15
  %2 = extractvalue { i64, i64 } %1, 0
  %3 = extractvalue { i64, i64 } %1, 1
  %_18.i.i = icmp ne i64 %2, 1101338453689927725
  %_2.i.i = icmp ne i64 %3, 472224167662714873
  %or.cond.i.not.i = select i1 %_18.i.i, i1 true, i1 %_2.i.i
  br i1 %or.cond.i.not.i, label %_ZN4core5error7Request7provide17h8f8125d2543333e0E.exit, label %bb2.i
```

**After**

```
; <provider_test::MyError as provider_test::Error>::provide
; Function Attrs: mustprogress nofree norecurse nosync nounwind nonlazybind willreturn memory(argmem: readwrite) uwtable
define void `@"_ZN63_$LT$provider_test..MyError$u20$as$u20$provider_test..Error$GT$7provide17h5bbf091795a6d359E"(ptr` noalias nocapture noundef nonnull readonly align 1 %self, ptr nocapture noundef nonnull align 8 %request.0, ptr noalias nocapture noundef readonly align 8 dereferenceable(24) %request.1) unnamed_addr #2 personality ptr `@rust_eh_personality` {
start:
  %_19.i = load i64, ptr %request.0, align 8, !noalias !3, !noundef !3
  switch i64 %_19.i, label %_ZN13provider_test7Request7provide17heb3ee140962e3b2fE.exit [
    i64 7665305208997882008, label %bb12.i
    i64 7050211241160863540, label %bb12.i3
    i64 9112786072622981063, label %bb12.i11
  ]
```
github-actions bot pushed a commit to rust-lang/miri that referenced this issue Jun 13, 2024
Simplify provider api to improve llvm ir

This PR seeks to resolve the last concern in rust-lang/rust#99301 (comment)

We resolve the issue by moving the type_id to be stored in the `Request` itself rather than being accessed through the `Erased` trait, letting the compiler infer that the value of the type id will not change between lookups.

### LLVM Codegen

**Before**

```
; <provider_test::MyError as core::error::Error>::provide
; Function Attrs: nonlazybind uwtable
define void `@"_ZN61_$LT$provider_test..MyError$u20$as$u20$core..error..Error$GT$7provide17hd9c9de412063aa73E"(ptr` noalias nocapture noundef nonnull readonly align 1 %self, ptr noundef nonnull align 1 %request.0, ptr noalias nocapture noundef readonly align 8 dereferenceable(32) %request.1) unnamed_addr #0 personality ptr `@rust_eh_personality` {
start:
  %0 = getelementptr inbounds i8, ptr %request.1, i64 24
  %self.1.val.i = load ptr, ptr %0, align 8
  %1 = tail call { i64, i64 } %self.1.val.i(ptr noundef nonnull align 1 %request.0), !noalias !15
  %2 = extractvalue { i64, i64 } %1, 0
  %3 = extractvalue { i64, i64 } %1, 1
  %_18.i.i = icmp ne i64 %2, 1101338453689927725
  %_2.i.i = icmp ne i64 %3, 472224167662714873
  %or.cond.i.not.i = select i1 %_18.i.i, i1 true, i1 %_2.i.i
  br i1 %or.cond.i.not.i, label %_ZN4core5error7Request7provide17h8f8125d2543333e0E.exit, label %bb2.i
```

**After**

```
; <provider_test::MyError as provider_test::Error>::provide
; Function Attrs: mustprogress nofree norecurse nosync nounwind nonlazybind willreturn memory(argmem: readwrite) uwtable
define void `@"_ZN63_$LT$provider_test..MyError$u20$as$u20$provider_test..Error$GT$7provide17h5bbf091795a6d359E"(ptr` noalias nocapture noundef nonnull readonly align 1 %self, ptr nocapture noundef nonnull align 8 %request.0, ptr noalias nocapture noundef readonly align 8 dereferenceable(24) %request.1) unnamed_addr #2 personality ptr `@rust_eh_personality` {
start:
  %_19.i = load i64, ptr %request.0, align 8, !noalias !3, !noundef !3
  switch i64 %_19.i, label %_ZN13provider_test7Request7provide17heb3ee140962e3b2fE.exit [
    i64 7665305208997882008, label %bb12.i
    i64 7050211241160863540, label %bb12.i3
    i64 9112786072622981063, label %bb12.i11
  ]
```
ForsakenHarmony pushed a commit to vercel/next.js that referenced this issue Jul 25, 2024
This:

- Updates to the latest api change for `StdError` in
`error_generic_member_access` rust-lang/rust#99301
- Updates `pathfinder_simd` for compatiblity
- Updates other crates for compatibility with Next.js


Closes WEB-1635
ForsakenHarmony pushed a commit to vercel/next.js that referenced this issue Jul 29, 2024
This:

- Updates to the latest api change for `StdError` in
`error_generic_member_access` rust-lang/rust#99301
- Updates `pathfinder_simd` for compatiblity
- Updates other crates for compatibility with Next.js


Closes WEB-1635
ForsakenHarmony pushed a commit to vercel/next.js that referenced this issue Aug 1, 2024
This:

- Updates to the latest api change for `StdError` in
`error_generic_member_access` rust-lang/rust#99301
- Updates `pathfinder_simd` for compatiblity
- Updates other crates for compatibility with Next.js


Closes WEB-1635
@de-vri-es
Copy link
Contributor

de-vri-es commented Dec 21, 2024

Hey,

Maybe it's a bit late to bring this up, but I also feel it's kinda important.

When I saw these new generic member access API, my first thought was "eep". It introduces a new concept in the standard library which I'm not sure is a good thing: to use types as function contracts.

To clarify what I mean: a type no longer represents just the type a "thing" can have, it also now gets an implied meaning of what it means to provide that type.

This system is designed to allow any T to potentially produce a Y. The problem I see with that is that there is no context information about what the Y value should mean. There is no function contract other than "produce a Y". And that means that Y now has an implicit function contract what it means to produce it.

For example: what am I supposed to expect when I ask MyError to produce a u8? I suppose MyError knows, but how is it going to document this? The most obvious place would be the main type documentation, but I don't think that's a particularly good idea.

Also, if I'm a generic function, there's nothing that stops a user from passing another type that produces a different u8 than what my generic function wants. It's a bit like duck typing in this respect: if a duck can produce a u8 and this T can produce a u8, then T is probably a duck.

@CobaltCause
Copy link

I imagine the intended workaround for that is to define a newtype struct that contains an otherwise ambiguous type like u8 where the newtype struct has documentation explaining the specific meaning in the specific context of that newtype struct and also serves as a way to disambiguate between other newtype structs that also just contain u8.

For example, instead of:

let x = request_value::<u8>(&error)?;
// What does the value in x even mean???

It should be preferred to do:

/// A description about e.g. how this is an application-specific error code and what it means goes here.
struct ErrorCode(u8);

// Other newtypes wrapping the same type but having a different meaning.
struct NotErrorCode(u8);
struct AlsoNotErrorCode(u8);`
struct Etc(u8);

let x = request_value::<ErrorCode>(&error)?;
// The value in x means what ErrorCode says it means.

@de-vri-es
Copy link
Contributor

de-vri-es commented Dec 21, 2024

Sure, you can add more types to make more function contracts. But my concern remains that a function contract normally belongs on a function, and here it is on a type.

If this was just a crate on crates.io, then no problem. But for the standard library I would expect it to stick with idiomatic code and not explore what kind of tricks you can do with the typesystem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-tracking-issue Category: An issue tracking the progress of sth. like the implementation of an RFC T-libs-api Relevant to the library API team, which will review and decide on the PR/issue.
Projects
None yet
Development

No branches or pull requests