dtolnay/thiserror (thiserror)
### [`v2.0.0`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.0)
[Compare Source](https://redirect.github.com/dtolnay/thiserror/compare/1.0.68...2.0.0)
#### Breaking changes
- Referencing keyword-named fields by a raw identifier like `{r#type}` inside a format string is no longer accepted; simply use the unraw name like `{type}` ([#347](https://redirect.github.com/dtolnay/thiserror/issues/347))
This aligns thiserror with the standard library's formatting macros, which gained support for implicit argument capture later than the release of this feature in thiserror 1.x.
```rust
#[derive(Error, Debug)]
#[error("... {type} ...")] // Before: {r#type}
pub struct Error {
pub r#type: Type,
}
```
- Trait bounds are no longer inferred on fields whose value is shadowed by an explicit named argument in a format message ([#345](https://redirect.github.com/dtolnay/thiserror/issues/345))
```rust
// Before: impl Display for Error
// After: impl Display for Error
#[derive(Error, Debug)]
#[error("{thing:o}", thing = "...")]
pub struct Error {
thing: T,
}
```
- Tuple structs and tuple variants can no longer use numerical `{0}` `{1}` access at the same time as supplying extra positional arguments for a format message, as this makes it ambiguous whether the number refers to a tuple field vs a different positional arg ([#354](https://redirect.github.com/dtolnay/thiserror/issues/354))
```rust
#[derive(Error, Debug)]
#[error("ambiguous: {0} {}", $N)]
// ^^^ Not allowed, use #[error("... {0} {n}", n = $N)]
pub struct TupleError(i32);
```
- Code containing invocations of thiserror's `derive(Error)` must now have a direct dependency on the `thiserror` crate regardless of the error data structure's contents ([#368](https://redirect.github.com/dtolnay/thiserror/issues/368), [#369](https://redirect.github.com/dtolnay/thiserror/issues/369), [#370](https://redirect.github.com/dtolnay/thiserror/issues/370), [#372](https://redirect.github.com/dtolnay/thiserror/issues/372))
#### Features
- Support disabling thiserror's standard library dependency by disabling the default "std" Cargo feature: `thiserror = { version = "2", default-features = false }` ([#373](https://redirect.github.com/dtolnay/thiserror/issues/373))
- Support using `r#source` as field name to opt out of a field named "source" being treated as an error's `Error::source()` ([#350](https://redirect.github.com/dtolnay/thiserror/issues/350))
```rust
#[derive(Error, Debug)]
#[error("{source} ==> {destination}")]
pub struct Error {
r#source: char,
destination: char,
}
let error = Error { source: 'S', destination: 'D' };
```
- Infinite recursion in a generated Display impl now produces an `unconditional_recursion` warning ([#359](https://redirect.github.com/dtolnay/thiserror/issues/359))
```rust
#[derive(Error, Debug)]
#[error("??? {self}")]
pub struct Error;
```
- A new attribute `#[error(fmt = path::to::myfmt)]` can be used to write formatting logic for an enum variant out-of-line ([#367](https://redirect.github.com/dtolnay/thiserror/issues/367))
```rust
#[derive(Error, Debug)]
pub enum Error {
#[error(fmt = demo_fmt)]
Demo { code: u16, message: Option },
}
fn demo_fmt(code: &u16, message: &Option, formatter: &mut fmt::Formatter) -> fmt::Result {
write!(formatter, "{code}")?;
if let Some(msg) = message {
write!(formatter, " - {msg}")?;
}
Ok(())
}
```
- Enums with an enum-level format message are now able to have individual variants that are `transparent` to supersede the enum-level message ([#366](https://redirect.github.com/dtolnay/thiserror/issues/366))
```rust
#[derive(Error, Debug)]
#[error("my error {0}")]
pub enum Error {
Json(#[from] serde_json::Error),
Yaml(#[from] serde_yaml::Error),
#[error(transparent)]
Other(#[from] anyhow::Error),
}
```
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 is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, check this box
This PR contains the following updates:
1
->2
Release Notes
dtolnay/thiserror (thiserror)
### [`v2.0.0`](https://redirect.github.com/dtolnay/thiserror/releases/tag/2.0.0) [Compare Source](https://redirect.github.com/dtolnay/thiserror/compare/1.0.68...2.0.0) #### Breaking changes - Referencing keyword-named fields by a raw identifier like `{r#type}` inside a format string is no longer accepted; simply use the unraw name like `{type}` ([#347](https://redirect.github.com/dtolnay/thiserror/issues/347)) This aligns thiserror with the standard library's formatting macros, which gained support for implicit argument capture later than the release of this feature in thiserror 1.x. ```rust #[derive(Error, Debug)] #[error("... {type} ...")] // Before: {r#type} pub struct Error { pub r#type: Type, } ``` - Trait bounds are no longer inferred on fields whose value is shadowed by an explicit named argument in a format message ([#345](https://redirect.github.com/dtolnay/thiserror/issues/345)) ```rust // Before: implConfiguration
📅 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 is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.