# Changelog
## v2.0.0
### Malformed feeds no longer panic
The parsers called `unwrap()` and `assert!()` on untrusted input in 53 places, so an
entry missing a required field aborted the process. Every such path now returns a
[`ParseError`](errors.md).
### `ParseError` reworked
Added `DeserializeError`, `Utf8Error` and `IoError`; removed the never-constructed
`DateParseError`; marked the enum `#[non_exhaustive]`. `InvalidFeedFormat` and
`MissingField` are now actually returned rather than merely defined.
### Dependencies
Dropped `anyhow`, `chrono`, `reqwest`, `tokio` and `tokio-test`, none of which were
used. Upgraded `quick-xml` to 0.41.
### Toolchain and metadata
Raised the edition to 2024 (MSRV 1.85, see the [policy](development.md#minimum-supported-rust-version)),
filled in the crates.io metadata, and fixed the `repository` URL, which pointed at a
repository that does not exist.
### Migrating from 1.x
`parse` keeps its signature, so code that calls `.unwrap()` on the result still
compiles. Two changes need attention:
- Input that used to panic now returns `Err`, so error branches may be reached for the
first time.
- `match` expressions over `ParseError` need a wildcard arm, and `DateParseError` no
longer exists.
## v1.0.12
Added the `ParseError` and `ParseResult` types.
## v1.0.11
Made it possible to parse HTML in `<title></title>` and `<description></description>`
sections.