Skip to content

Always delegate returning errors to the Visitor from Content[Ref]Deserializer#2811

Open
Mingun wants to merge 7 commits into
serde-rs:masterfrom
Mingun:visitor-driven
Open

Always delegate returning errors to the Visitor from Content[Ref]Deserializer#2811
Mingun wants to merge 7 commits into
serde-rs:masterfrom
Mingun:visitor-driven

Conversation

@Mingun

@Mingun Mingun commented Aug 24, 2024

Copy link
Copy Markdown
Contributor

The Deserializer conception is to provide data from the format to the type,the type should decide if it can accept data or return an error. Deserializer can do internal conversions based on the hints (== which method was called), but it shouldn't return errors. Hints are only recommendations, so if it does not known how to convert data, it should pass to the Visitor the most natural representation of its internal value.

This PR removes almost all attempts to return error from ContentDeserializer and ContentRefDeserializer. Thanks to the refactoring done in #2805 it is clearly visible that we always can delegate to deserialize_any when no special handling is the content is required.

Errors from VariantAccess were replaced by a call to Visitor::visit_unit because the error said that the Unit variant was unexpected. Attempt to deserialize accept unit variant when type does not expect it, will result to the same error, but if unit will be expected, the type will be able to deserialized (derived Deserialize implementations never does that, so that is possible only if implement Deserialize manually).

Also, this PR unifies behavior between unit structs and units, now both of them can be deserialized from the empty sequence. Previously only the unit struct could be deserialized, while the explanation for special handling for both types exactly the same. Related issue: #2340

@Mingun Mingun changed the title (Almost) always delegate returning errors to the Visitor from Content[Ref]Deserializer Always delegate returning errors to the Visitor from Content[Ref]Deserializer Aug 24, 2024
@Mingun

Mingun commented Oct 6, 2024

Copy link
Copy Markdown
Contributor Author

@dtolnay, @oli-obk, any feedback?

@oli-obk

oli-obk commented Oct 6, 2024

Copy link
Copy Markdown
Member

Pinging is not changing our priorities in any useful way

We know which PRs are open and if our free time allows we make some progress on it.

@Mingun

Mingun commented Oct 6, 2024

Copy link
Copy Markdown
Contributor Author

Nothing personal, I just think, that if you don't have time to work on the project on which the whole Rust ecosystem is based, its time to request help for maintaining. Sad to say this, but looks like I will be forced to request unmaintained status for serde at RustSec. The current situation persist a long time and it seems nothing will be changed without active community support.

@oli-obk

oli-obk commented Oct 6, 2024

Copy link
Copy Markdown
Member

Please fork it instead. That is much more sustainable in the long run

@Mingun

Mingun commented Oct 6, 2024

Copy link
Copy Markdown
Contributor Author

Unfortunately, I cannot use my fork for all my direct and indirect dependencies, so this is only short-term solution.

@aDotInTheVoid

Copy link
Copy Markdown

Unfortunately, I cannot use my fork for all my direct and indirect dependencies

Cargo lets you do exactly this, see here. (and for non-cargo build systems it should also be possible)

@Mingun

Mingun commented Oct 6, 2024

Copy link
Copy Markdown
Contributor Author

That is what I name "short-term solution"

@oli-obk

oli-obk commented Oct 6, 2024

Copy link
Copy Markdown
Member

Why do you need to replace the derives of your deps? Are the issues you have not contained to a single derive expansion but affected by the way fields' types implement the serde traits?

@Mingun

Mingun commented Oct 6, 2024

Copy link
Copy Markdown
Contributor Author

Not all fixes in serde_derive, most of them also require changes in serde. That means that you will need to replace crate in all dependencies to not get strange errors that trait X is not implemented.

@oli-obk

oli-obk commented Oct 6, 2024

Copy link
Copy Markdown
Member

serde changes should be rare and well thought through.

They are effectively on the level of getting a change into libstd at this point.

I have several times brought up things like a perf (build and run) suite and a crater-at-home extension that would help us have confidence in changes that are complex enough to have hidden breaking changes that are hard to find in reviews

@Mingun

Mingun commented Oct 6, 2024

Copy link
Copy Markdown
Contributor Author

If you are too afraid to make changes, it means that it is time to release a new version, which will not be automatically updated in most cases (i.e. release version 2). The release of the new version has no disadvantages: you do not break clients of version 1, you can make any breaking changes (however, you are not required to do this).

Since version 1 is effectively frozen, there is no problem to maintain two versions (which is a frequent excuse for not releasing a new version). You don't need to maintain version 1 (because you don't do it anyway), you only need to maintain version 2. So you only maintain one version anyway, but with the release of version 2 you can actually make changes without worrying too much about the consequences.

@oli-obk

oli-obk commented Oct 6, 2024

Copy link
Copy Markdown
Member

Releasing a new version is just as easy as forking under a different name. If you believe that to be the way forward, there is nothing stopping you. There is no difference between a major version bump and a separate crate name as far as cargo is concerned.

@Mingun

Mingun commented Oct 6, 2024

Copy link
Copy Markdown
Contributor Author

There has difference: when new version of existing crate is released, consumers can support both versions just by using correct semver string. Even if you do some breaking changes in some parts, but consumers does not depend on these parts, they can allow both versions (i. e. actually for them the changes are compatible). With the new crate you are always incompatible, without variants. In case of serde it is hightly likely that the first variant will be totally dominated.

Mingun and others added 5 commits September 27, 2025 00:16
failures(1):
    newtype_unit
…lize enums

Helper methods visit_content_[seq|map] does the same as [Seq|Map]Deserializer::deserialize_any
and used everywhere except here. Reuse them for consistency
…sibility of the Visitor

Examples of errors produced during deserialization of internally tagged enums in tests
if instead of a Seq/Map a Str("unexpected string") will be provided:

In tests/test_annotations.rs
  flatten::enum_::internally_tagged::tuple:
    before: `invalid type: string "unexpected string", expected tuple variant`
    after : `invalid type: string "unexpected string", expected tuple variant Enum::Tuple`

  flatten::enum_::internally_tagged::struct_from_map:
    before: `invalid type: string "unexpected string", expected struct variant`
    after : `invalid type: string "unexpected string", expected struct variant Enum::Struct`
Metalhearf pushed a commit to processone/fluux-messenger that referenced this pull request Mar 30, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [ctor](https://redirect.github.com/mmastrac/rust-ctor) | dependencies
| minor | `0.2` → `0.8` |
| [quick-xml](https://redirect.github.com/tafia/quick-xml) |
dependencies | minor | `0.36` → `0.39` |
| [reqwest](https://redirect.github.com/seanmonstar/reqwest) |
dependencies | minor | `0.12` → `0.13` |
| [scraper](https://redirect.github.com/rust-scraper/scraper) |
dependencies | minor | `0.22` → `0.26` |
|
[tokio-tungstenite](https://redirect.github.com/snapview/tokio-tungstenite)
| dependencies | minor | `0.24` → `0.29` |

---

### Release Notes

<details>
<summary>tafia/quick-xml (quick-xml)</summary>

###
[`v0.39.2`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0392----2026-02-20)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.39.1...v0.39.2)

##### New Features

- [#&#8203;483]: Implement `read_text_into()` and
`read_text_into_async()`.

##### Bug Fixes

- [#&#8203;939]: Fix parsing error of the tag from buffered reader, when
the first byte `<`
is the last in the `BufRead` internal buffer. This is the regression
from [#&#8203;936].

[#&#8203;483]: https://redirect.github.com/tafia/quick-xml/issues/483

[#&#8203;936]: https://redirect.github.com/tafia/quick-xml/pull/936

[#&#8203;939]: https://redirect.github.com/tafia/quick-xml/issues/939

###
[`v0.39.1`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0391----2026-02-15)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.39.0...v0.39.1)

##### New Features

- [#&#8203;598]: Add method `NamespaceResolver::set_level` which may be
helpful in some circumstances.

##### Bug Fixes

- [#&#8203;597]: Fix incorrect processing of namespace scopes in
`NsReader::read_to_end`
`NsReader::read_to_end_into`, `NsReader::read_to_end_into_async` and
`NsReader::read_text`.
  The scope started by a start element was not ended after that call.
- [#&#8203;936]: Fix incorrect result of `.read_text()` when it is
called after reading `Text` or `GeneralRef` event.

[#&#8203;597]: https://redirect.github.com/tafia/quick-xml/issues/597

[#&#8203;598]: https://redirect.github.com/tafia/quick-xml/pull/598

[#&#8203;936]: https://redirect.github.com/tafia/quick-xml/pull/936

###
[`v0.39.0`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0390----2026-01-11)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.4...v0.39.0)

Added a way to configure `Writer`. Now all configuration is contained in
the `writer::Config`
struct and can be applied at once. When `serde-types` feature is
enabled, configuration is serializable.

##### New Features

- [#&#8203;846]: Add methods `config()` and `config_mut()` to inspect
and change the writer configuration.
- [#&#8203;846]: Add ability to write space before `/>` in self-closed
tags for maximum compatibility with
  XHTML.
- [#&#8203;846]: Add method `empty_element_handling()` as a more
powerful alternative to `expand_empty_elements()`
  in `Serializer`.
- [#&#8203;929]: Allow to pass list of field names to
`impl_deserialize_for_internally_tagged_enum!` macro
  which is required if you enum variants contains `$value` fields.

##### Bug Fixes

- [#&#8203;923]: Implement correct skipping of well-formed DTD.

##### Misc Changes

- [#&#8203;908]: Increase minimal supported `serde` version from 1.0.139
to 1.0.180.
- [#&#8203;913]: Deprecate `.prefixes()`, `.resolve()`,
`.resolve_attribute()`, and `.resolve_element()`
of `NsReader`. Use `.resolver().bindings()` and `.resolver().resolve()`
methods instead.
- [#&#8203;913]: `Attributes::has_nil` now accepts `NamespaceResolver`
instead of `Reader<R>`.
- [#&#8203;924]: (breaking change) Split
`SyntaxError::UnclosedPIOrXmlDecl` into `UnclosedPI` and
  `UnclosedXmlDecl` for more precise error reporting.
- [#&#8203;924]: (breaking change) `Parser::eof_error` now takes `&self`
and content `&[u8]` parameters.
- [#&#8203;926]: (breaking change) Split `SyntaxError::UnclosedTag` into
`UnclosedTag`,
`UnclosedSingleQuotedAttributeValue` and
`UnclosedDoubleQuotedAttributeValue` for more precise error reporting.

[#&#8203;846]: https://redirect.github.com/tafia/quick-xml/issues/846

[#&#8203;908]: https://redirect.github.com/tafia/quick-xml/pull/908

[#&#8203;913]: https://redirect.github.com/tafia/quick-xml/pull/913

[#&#8203;923]: https://redirect.github.com/tafia/quick-xml/issues/923

[#&#8203;924]: https://redirect.github.com/tafia/quick-xml/pull/924

[#&#8203;926]: https://redirect.github.com/tafia/quick-xml/issues/926

[#&#8203;929]: https://redirect.github.com/tafia/quick-xml/pull/929

###
[`v0.38.4`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0384----2025-11-11)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.3...v0.38.4)

##### New Features

- [#&#8203;353]: Add ability to serialize textual content as CDATA
sections in `Serializer`.
Everywhere where the text node may be created, a CDATA section(s) could
be produced instead.
  See the new [`Serializer::text_format()`] method.

##### Bug Fixes

- [#&#8203;912]: Fix deserialization of numbers, booleans and characters
that is space-wrapped, for example
`<int> 42 </int>`. That space characters are usually indent added during
serialization and
  other XML serialization libraries trims them

##### Misc Changes

- [#&#8203;901]: Fix running tests on 32-bit architecture
- [#&#8203;909]: Avoid some allocations in the `Serializer`

[#&#8203;353]: https://redirect.github.com/tafia/quick-xml/issues/353

[#&#8203;901]: https://redirect.github.com/tafia/quick-xml/pull/901

[#&#8203;909]: https://redirect.github.com/tafia/quick-xml/pull/909

[#&#8203;912]: https://redirect.github.com/tafia/quick-xml/pull/912

[`Serializer::text_format()`]:
https://docs.rs/quick-xml/0.38.4/quick_xml/se/struct.Serializer.html#method.text_format

###
[`v0.38.3`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0383----2025-08-24)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.2...v0.38.3)

##### Bug Fixes

- [#&#8203;895]: Fix incorrect normalization of `\rX` EOL sequences
where `X` is a char which is
  UTF-8 encoded as \[c2 xx], except \[c2 85].

##### Misc Changes

- [#&#8203;895]: Add new `xml10_content()` and `xml11_content()` methods
which behaves the same as
`html_content()` and `xml_content()` methods, but express intention more
clearly.

[#&#8203;895]: https://redirect.github.com/tafia/quick-xml/pull/895

###
[`v0.38.2`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0382----2025-08-19)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.1...v0.38.2)

##### New Features

- [#&#8203;893]: Implement `FusedIterator` for `NamespaceBindingsIter`.
- [#&#8203;893]: Make `NamespaceResolver` public.
- [#&#8203;893]: Add `NsReader::resolver()` for access to namespace
resolver.

##### Misc Changes

- [#&#8203;893]: Rename `PrefixIter` to `NamespaceBindingsIter`.

[#&#8203;893]: https://redirect.github.com/tafia/quick-xml/pull/893

###
[`v0.38.1`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0381----2025-08-03)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.0...v0.38.1)

##### Important changes

To get text in events according to the XML specification (normalized
EOLs) use the
new methods `xml_content()` instead of `decode()`. `Deserializer` uses
new method
automatically.

##### New Features

- [#&#8203;882]: Add new methods to create `Deserializer` from existing
`NsReader`:
  - `Deserializer::borrowing`
  - `Deserializer::borrowing_with_resolver`
  - `Deserializer::buffering`
  - `Deserializer::buffering_with_resolver`
- [#&#8203;878]: Add ability to serialize structs in `$value` fields.
The struct name will
  be used as a tag name. Previously only enums was allowed there.
- [#&#8203;806]: Add `BytesText::xml_content`, `BytesCData::xml_content`
and `BytesRef::xml_content`
  methods which returns XML EOL normalized strings.
- [#&#8203;806]: Add `BytesText::html_content`,
`BytesCData::html_content` and `BytesRef::html_content`
  methods which returns HTML EOL normalized strings.

##### Bug Fixes

- [#&#8203;806]: Properly normalize EOL characters in `Deserializer`.
- [#&#8203;888]: Properly split attribute values by items when
deserialize attribute into
  list of values and attribute requires decoding.

[#&#8203;806]: https://redirect.github.com/tafia/quick-xml/issues/806

[#&#8203;878]: https://redirect.github.com/tafia/quick-xml/pull/878

[#&#8203;882]: https://redirect.github.com/tafia/quick-xml/pull/882

[#&#8203;888]: https://redirect.github.com/tafia/quick-xml/pull/888

###
[`v0.38.0`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0380----2025-06-28)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.5...v0.38.0)

##### Significant changes

Now references to entities (as predefined, such as `&lt;`, as
user-defined) reported as a new
`Event::GeneralRef`.
Caller can parse the content of the entity and stream events from it as
it is required by the
XML specification. See the updated `custom_entities` example!

Implement whitespace behavior in the standard in `Deserializer`, which
says string primitive
types should preserve whitespace, while all other primitives have
collapse behavior.

##### New Features

- [#&#8203;863]: Add `Attributes::into_map_access(&str)` and
`Attributes::into_deserializer()` when `serialize`
feature is enabled. This will allow do deserialize serde types right
from attributes. Both methods
returns the same type which implements serde's `Deserializer` and
`MapAccess` traits.
- [#&#8203;766]: Allow to parse resolved entities as XML fragments and
stream events from them.
- [#&#8203;766]: Added new event `Event::GeneralRef` with content of
[general entity].
- [#&#8203;766]: Added new configuration option `allow_dangling_amp`
which allows to have
a `&` not followed by `;` in the textual data which is required for some
applications
  for compatibility reasons.
- [#&#8203;285]: Add ability to `quick_xml::de::Text` to access text
with trimmed spaces

##### Bug Fixes

- [#&#8203;868]: Allow to have both `$text` and `$value` special fields
in one struct. Previously
any text will be recognized as `$value` field even when `$text` field is
also presented.
- [#&#8203;868]: Skip text events when deserialize a sequence of items
overlapped with text (including CDATA).
- [#&#8203;841]: Do not strip `xml` prefix from the attributes when map
them to struct fields in `Deserializer`.

##### Misc Changes

- [#&#8203;863]: Remove `From<QName<'a>> for BytesStart<'a>` because now
`BytesStart` stores the
encoding in which its data is encoded, but `QName` is a simple wrapper
around byte slice.
- [#&#8203;766]: `BytesText::unescape` and `BytesText::unescape_with`
replaced by `BytesText::decode`.
Now Text events does not contain escaped parts which are reported as
`Event::GeneralRef`.

[#&#8203;285]: https://redirect.github.com/tafia/quick-xml/issues/285

[#&#8203;766]: https://redirect.github.com/tafia/quick-xml/pull/766

[#&#8203;841]: https://redirect.github.com/tafia/quick-xml/issues/841

[#&#8203;863]: https://redirect.github.com/tafia/quick-xml/pull/863

[#&#8203;868]: https://redirect.github.com/tafia/quick-xml/pull/868

[general entity]: https://www.w3.org/TR/xml11/#gen-entity

###
[`v0.37.5`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0375----2025-04-27)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.4...v0.37.5)

##### New Features

- [#&#8203;857]: Add `BytesCData::decode()`.

[#&#8203;857]: https://redirect.github.com/tafia/quick-xml/pull/857

###
[`v0.37.4`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0374----2025-04-01)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.3...v0.37.4)

##### Misc Changes

- [#&#8203;852]: Add `Debug` impl for `NsReader` and `Reader` and
`Clone` impl for `NsReader`

[#&#8203;852]: https://redirect.github.com/tafia/quick-xml/pull/852

###
[`v0.37.3`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0373----2025-03-25)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.2...v0.37.3)

##### New Features

- [#&#8203;850]: Add `Attribute::as_bool()` method to get an attribute
value as a boolean.
- [#&#8203;850]: Add `Attributes::has_nil()` method to check if
attributes has `xsi:nil` attribute set to `true`.
- [#&#8203;497]: Handle `xsi:nil` attribute in serde Deserializer to
better process optional fields.

[#&#8203;497]: https://redirect.github.com/tafia/quick-xml/issues/497

[#&#8203;850]: https://redirect.github.com/tafia/quick-xml/pull/850

###
[`v0.37.2`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0372----2024-12-29)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.1...v0.37.2)

##### New Features

- [#&#8203;836]: Add `se::to_utf8_io_writer()` helper compatible with
`std::io::Write` and restricted to UTF-8 encoding.

[#&#8203;836]: https://redirect.github.com/tafia/quick-xml/pull/836

###
[`v0.37.1`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0371----2024-11-17)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.0...v0.37.1)

##### New Features

- [#&#8203;831]: Add `BytesCData::escaped()` fn to construct CDATA
events from arbitrary user input.

[#&#8203;831]: https://redirect.github.com/tafia/quick-xml/issues/831

###
[`v0.37.0`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0370----2024-10-27)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.36.2...v0.37.0)

##### New Features

- [#&#8203;826]: Implement `From<String>` and `From<Cow<str>>` for
`quick_xml::de::Text`.
- [#&#8203;826]: Make `SimpleTypeDeserializer` and
`SimpleTypeSerializer` public.
- [#&#8203;826]: Implement `IntoDeserializer` for `&mut Deserializer`.

##### Bug Fixes

- [#&#8203;655]: Do not write indent before and after `$text` fields and
those `$value` fields
  that are serialized as a text (for example, `usize` or `String`).
- [#&#8203;826]: Handle only those boolean representations that are
allowed by [Xml Schema]
which is only `"true"`, `"1"`, `"false"`, and `"0"`. Previously the
following values
  also was accepted:
| `bool` | XML content |
| ------- |
------------------------------------------------------------- |
| `true` | `"True"`, `"TRUE"`, `"t"`, `"Yes"`, `"YES"`, `"yes"`, `"y"` |
| `false` | `"False"`, `"FALSE"`, `"f"`, `"No"`, `"NO"`, `"no"`, `"n"` |

##### Misc Changes

- [#&#8203;227]: Split `SeError` from `DeError` in the `serialize`
feature.
  Serialize functions and methods now return `SeError`.
- [#&#8203;810]: Return `std::io::Error` from `Writer` methods.
- [#&#8203;811]: Split `NamespaceError` and `EncodingError` from
`Error`.
- [#&#8203;811]: Renamed `Error::EscapeError` to `Error::Escape` to
match other variants.
- [#&#8203;811]: Narrow down error return type from `Error` where only
one variant is ever returned:
attribute related methods on `BytesStart` and `BytesDecl` returns
`AttrError`
- [#&#8203;820]: Classify output of the `Serializer` by returning an
enumeration with kind of written data
- [#&#8203;823]: Do not allow serialization of consequent primitives,
for example `Vec<usize>` or
`Vec<String>` in `$value` fields. They cannot be deserialized back with
the same result
- [#&#8203;827]: Make `escape` and it variants take a `impl
Into<Cow<str>>` argument and implement
  `From<(&'a str, Cow<'a, str>)>` on `Attribute`
- [#&#8203;826]: Removed `DeError::InvalidInt`, `DeError::InvalidFloat`
and `DeError::InvalidBoolean`.
Now the responsibility for returning the error lies with the visitor of
the type.
See rationale in
[serde-rs/serde#2811](https://redirect.github.com/serde-rs/serde/pull/2811)

[#&#8203;227]: https://redirect.github.com/tafia/quick-xml/issues/227

[#&#8203;655]: https://redirect.github.com/tafia/quick-xml/issues/655

[#&#8203;810]: https://redirect.github.com/tafia/quick-xml/pull/810

[#&#8203;811]: https://redirect.github.com/tafia/quick-xml/pull/811

[#&#8203;820]: https://redirect.github.com/tafia/quick-xml/pull/820

[#&#8203;823]: https://redirect.github.com/tafia/quick-xml/pull/823

[#&#8203;826]: https://redirect.github.com/tafia/quick-xml/pull/826

[#&#8203;827]: https://redirect.github.com/tafia/quick-xml/pull/827

[Xml Schema]: https://www.w3.org/TR/xmlschema11-2/#boolean

</details>

<details>
<summary>seanmonstar/reqwest (reqwest)</summary>

###
[`v0.13.2`](https://redirect.github.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v0132)

[Compare
Source](https://redirect.github.com/seanmonstar/reqwest/compare/v0.13.1...v0.13.2)

- Fix HTTP/2 and native-tls ALPN feature combinations.
- Fix HTTP/3 to send h3 ALPN.
- (wasm) fix `RequestBuilder::json()` from override previously set
content-type.

###
[`v0.13.1`](https://redirect.github.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v0131)

[Compare
Source](https://redirect.github.com/seanmonstar/reqwest/compare/v0.13.0...v0.13.1)

- Fixes compiling with rustls on Android targets.

###
[`v0.13.0`](https://redirect.github.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v0130)

[Compare
Source](https://redirect.github.com/seanmonstar/reqwest/compare/v0.12.28...v0.13.0)

- **Breaking changes**:
  - `rustls` is now the default TLS backend, instead of `native-tls`.
- `rustls` crypto provider defaults to aws-lc instead of *ring*.
(`rustls-no-provider` exists if you want a different crypto provider)
  - `rustls-tls` has been renamed to `rustls`.
- rustls roots features removed, `rustls-platform-verifier` is used by
default.
    - To use different roots, call `tls_certs_only(your_roots)`.
- `native-tls` now includes ALPN. To disable, use `native-tls-no-alpn`.
  - `query` and `form` are now crate features, disabled by default.
- Long-deprecated methods and crate features have been removed (such as
`trust-dns`, which was renamed `hickory-dns` a while ago).
- Many TLS-related methods renamed to improve autocompletion and
discovery, but previous name left in place with a "soft" deprecation.
(just documented, no warnings)
  - For example, prefer `tls_backend_rustls()` over `use_rustls_tls()`.

#### v0.12.28

- Fix compiling on Windows if TLS and SOCKS features are not enabled.

#### v0.12.27

- Add `ClientBuilder::windows_named_pipe(name)` option that will force
all requests over that Windows Named Piper.

#### v0.12.26

- Fix sending `Accept-Encoding` header only with values configured with
reqwest, regardless of underlying tower-http config.

#### v0.12.25

- Add `Error::is_upgrade()` to determine if the error was from an HTTP
upgrade.
- Fix sending `Proxy-Authorization` if only username is configured.
- Fix sending `Proxy-Authorization` to HTTPS proxies when the target is
HTTP.
- Refactor internal decompression handling to use tower-http.

#### v0.12.24

- Refactor cookie handling to an internal middleware.
- Refactor internal random generator.
- Refactor base64 encoding to reduce a copy.
- Documentation updates.

#### v0.12.23

- Add `ClientBuilder::unix_socket(path)` option that will force all
requests over that Unix Domain Socket.
- Add `ClientBuilder::retry(policy)` and `reqwest::retry::Builder` to
configure automatic retries.
- Add `ClientBuilder::dns_resolver2()` with more ergonomic argument
bounds, allowing more resolver implementations.
- Add `http3_*` options to `blocking::ClientBuilder`.
- Fix default TCP timeout values to enabled and faster.
- Fix SOCKS proxies to default to port 1080
- (wasm) Add cache methods to `RequestBuilder`.

#### v0.12.22

- Fix socks proxies when resolving IPv6 destinations.

#### v0.12.21

- Fix socks proxy to use `socks4a://` instead of `socks4h://`.
- Fix `Error::is_timeout()` to check for hyper and IO timeouts too.
- Fix request `Error` to again include URLs when possible.
- Fix socks connect error to include more context.
- (wasm) implement `Default` for `Body`.

#### v0.12.20

- Add `ClientBuilder::tcp_user_timeout(Duration)` option to set
`TCP_USER_TIMEOUT`.
- Fix proxy headers only using the first matched proxy.
- (wasm) Fix re-adding `Error::is_status()`.

#### v0.12.19

- Fix redirect that changes the method to GET should remove payload
headers.
- Fix redirect to only check the next scheme if the policy action is to
follow.
- (wasm) Fix compilation error if `cookies` feature is enabled (by the
way, it's a noop feature in wasm).

#### v0.12.18

- Fix compilation when `socks` enabled without TLS.

#### v0.12.17

- Fix compilation on macOS.

#### v0.12.16

- Add `ClientBuilder::http3_congestion_bbr()` to enable BBR congestion
control.
- Add `ClientBuilder::http3_send_grease()` to configure whether to send
use QUIC grease.
- Add `ClientBuilder::http3_max_field_section_size()` to configure the
maximum response headers.
- Add `ClientBuilder::tcp_keepalive_interval()` to configure TCP probe
interval.
- Add `ClientBuilder::tcp_keepalive_retries()` to configure TCP probe
count.
- Add `Proxy::headers()` to add extra headers that should be sent to a
proxy.
- Fix `redirect::Policy::limit()` which had an off-by-1 error, allowing
1 more redirect than specified.
- Fix HTTP/3 to support streaming request bodies.
- (wasm) Fix null bodies when calling `Response::bytes_stream()`.

#### v0.12.15

- Fix Windows to support both `ProxyOverride` and `NO_PROXY`.
- Fix http3 to support streaming response bodies.
- Fix http3 dependency from public API misuse.

#### v0.12.14

- Fix missing `fetch_mode_no_cors()`, marking as deprecated when not on
WASM.

#### v0.12.13

- Add `Form::into_reader()` for blocking `multipart` forms.
- Add `Form::into_stream()` for async `multipart` forms.
- Add support for SOCKS4a proxies.
- Fix decoding responses with multiple zstd frames.
- Fix `RequestBuilder::form()` from overwriting a previously set
`Content-Type` header, like the other builder methods.
- Fix cloning of request timeout in `blocking::Request`.
- Fix http3 synchronization of connection creation, reducing unneccesary
extra connections.
- Fix Windows system proxy to use `ProxyOverride` as a `NO_PROXY` value.
- Fix blocking read to correctly reserve and zero read buffer.
- (wasm) Add support for request timeouts.
- (wasm) Fix `Error::is_timeout()` to return true when from a request
timeout.

#### v0.12.12

- (wasm) Fix compilation by not compiler `tokio/time` on WASM.

#### v0.12.11

- Fix decompression returning an error when HTTP/2 ends with an empty
data frame.

#### v0.12.10

- Add `ClientBuilder::connector_layer()` to allow customizing the
connector stack.
- Add `ClientBuilder::http2_max_header_list_size()` option.
- Fix propagating body size hint (`content-length`) information when
wrapping bodies.
- Fix decompression of chunked bodies so the connections can be reused
more often.

#### v0.12.9

- Add `tls::CertificateRevocationLists` support.
- Add crate features to enable webpki roots without selecting a rustls
provider.
- Fix `connection_verbose()` to output read logs.
- Fix `multipart::Part::file()` to automatically include content-length.
- Fix proxy to internally no longer cache system proxy settings.

#### v0.12.8

- Add support for SOCKS4 proxies.
- Add `multipart::Form::file()` method for adding files easily.
- Add `Body::wrap()` to wrap any `http_body::Body` type.
- Fix the pool configuration to use a timer to remove expired
connections.

#### v0.12.7

- Revert adding `impl Service<http::Request<_>>` for `Client`.

#### v0.12.6

- Add support for `danger_accept_invalid_hostnames` for `rustls`.
- Add `impl Service<http::Request<Body>>` for `Client` and `&'_ Client`.
- Add support for `!Sync` bodies in `Body::wrap_stream()`.
- Enable happy eyeballs when `hickory-dns` is used.
- Fix `Proxy` so that `HTTP(S)_PROXY` values take precedence over
`ALL_PROXY`.
- Fix `blocking::RequestBuilder::header()` from unsetting `sensitive` on
passed header values.

#### v0.12.5

- Add `blocking::ClientBuilder::dns_resolver()` method to change DNS
resolver in blocking client.
- Add `http3` feature back, still requiring `reqwest_unstable`.
- Add `rustls-tls-no-provider` Cargo feature to use rustls without a
crypto provider.
- Fix `Accept-Encoding` header combinations.
- Fix http3 resolving IPv6 addresses.
- Internal: upgrade to rustls 0.23.

#### v0.12.4

- Add `zstd` support, enabled with `zstd` Cargo feature.
- Add `ClientBuilder::read_timeout(Duration)`, which applies the
duration for each read operation. The timeout resets after a successful
read.

#### v0.12.3

- Add `FromStr` for `dns::Name`.
- Add `ClientBuilder::built_in_webpki_certs(bool)` to enable them
separately.
- Add `ClientBuilder::built_in_native_certs(bool)` to enable them
separately.
- Fix sending `content-length: 0` for GET requests.
- Fix response body `content_length()` to return value when timeout is
configured.
- Fix `ClientBuilder::resolve()` to use lowercase domain names.

#### v0.12.2

- Fix missing ALPN when connecting to socks5 proxy with rustls.
- Fix TLS version limits with rustls.
- Fix not detected ALPN h2 from server with native-tls.

#### v0.12.1

- Fix `ClientBuilder::interface()` when no TLS is enabled.
- Fix `TlsInfo::peer_certificate()` being truncated with rustls.
- Fix panic if `http2` feature disabled but TLS negotiated h2 in ALPN.
- Fix `Display` for `Error` to not include its source error.

</details>

<details>
<summary>rust-scraper/scraper (scraper)</summary>

###
[`v0.26.0`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.26.0)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.25.0...v0.26.0)

#### What's Changed

- fix dom manipulation example by
[@&#8203;JayceFayne](https://redirect.github.com/JayceFayne) in
[#&#8203;292](https://redirect.github.com/rust-scraper/scraper/pull/292)
- Bump selectors from 0.33.0 to 0.35.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;298](https://redirect.github.com/rust-scraper/scraper/pull/298)
- Bump indexmap from 2.12.1 to 2.13.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;294](https://redirect.github.com/rust-scraper/scraper/pull/294)
- Upgrade ego-tree to 0.11.0 and html5ever to 0.37.1 by
[@&#8203;cfvescovo](https://redirect.github.com/cfvescovo) in
[#&#8203;300](https://redirect.github.com/rust-scraper/scraper/pull/300)
- Bump html5ever from 0.37.1 to 0.38.0 by
[@&#8203;mohe2015](https://redirect.github.com/mohe2015) in
[#&#8203;303](https://redirect.github.com/rust-scraper/scraper/pull/303)
- Bump selectors from 0.35.0 to 0.36.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;307](https://redirect.github.com/rust-scraper/scraper/pull/307)
- Bump html5ever from 0.38.0 to 0.39.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;308](https://redirect.github.com/rust-scraper/scraper/pull/308)
- Version 0.26.0 by
[@&#8203;adamreichold](https://redirect.github.com/adamreichold) in
[#&#8203;306](https://redirect.github.com/rust-scraper/scraper/pull/306)

#### New Contributors

- [@&#8203;JayceFayne](https://redirect.github.com/JayceFayne) made
their first contribution in
[#&#8203;292](https://redirect.github.com/rust-scraper/scraper/pull/292)

**Full Changelog**:
<rust-scraper/scraper@v0.25.0...v0.26.0>

###
[`v0.25.0`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.25.0)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.24.0...v0.25.0)

#### What's Changed

- chore(Cargo.toml): bump servo to 0.36.0 by
[@&#8203;Jan9103](https://redirect.github.com/Jan9103) in
[#&#8203;280](https://redirect.github.com/rust-scraper/scraper/pull/280)
- Add version flag in executable by
[@&#8203;kachick](https://redirect.github.com/kachick) in
[#&#8203;282](https://redirect.github.com/rust-scraper/scraper/pull/282)
- Avoid panic for unknown flags and invalid selectors when using
executable by [@&#8203;kachick](https://redirect.github.com/kachick) in
[#&#8203;283](https://redirect.github.com/rust-scraper/scraper/pull/283)
- Update repo URL by
[@&#8203;atouchet](https://redirect.github.com/atouchet) in
[#&#8203;286](https://redirect.github.com/rust-scraper/scraper/pull/286)
- Added cargo deny to test github action by
[@&#8203;haydonryan](https://redirect.github.com/haydonryan) in
[#&#8203;287](https://redirect.github.com/rust-scraper/scraper/pull/287)

#### New Contributors

- [@&#8203;Jan9103](https://redirect.github.com/Jan9103) made their
first contribution in
[#&#8203;280](https://redirect.github.com/rust-scraper/scraper/pull/280)
- [@&#8203;kachick](https://redirect.github.com/kachick) made their
first contribution in
[#&#8203;282](https://redirect.github.com/rust-scraper/scraper/pull/282)
- [@&#8203;atouchet](https://redirect.github.com/atouchet) made their
first contribution in
[#&#8203;286](https://redirect.github.com/rust-scraper/scraper/pull/286)
- [@&#8203;haydonryan](https://redirect.github.com/haydonryan) made
their first contribution in
[#&#8203;287](https://redirect.github.com/rust-scraper/scraper/pull/287)

**Full Changelog**:
<rust-scraper/scraper@v0.24.0...v0.25.0>

###
[`v0.24.0`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.24.0)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.23.1...v0.24.0)

#### What's Changed

- Bump depedencies, especially html5ever, cssparser, selectors which
must be bumped together. by
[@&#8203;adamreichold](https://redirect.github.com/adamreichold) in
[#&#8203;249](https://redirect.github.com/rust-scraper/scraper/pull/249)
- Bump `selectors` to v0.28 by
[@&#8203;paolobarbolini](https://redirect.github.com/paolobarbolini) in
[#&#8203;251](https://redirect.github.com/rust-scraper/scraper/pull/251)
- Bump getopts from 0.2.21 to 0.2.22 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;254](https://redirect.github.com/rust-scraper/scraper/pull/254)
- Recreate README.md as a non-symlink by
[@&#8203;saschanaz](https://redirect.github.com/saschanaz) in
[#&#8203;250](https://redirect.github.com/rust-scraper/scraper/pull/250)
- Bump selectors from 0.28.0 to 0.29.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;257](https://redirect.github.com/rust-scraper/scraper/pull/257)
- Bump html5ever and selectors dependencies by
[@&#8203;mina86](https://redirect.github.com/mina86) in
[#&#8203;263](https://redirect.github.com/rust-scraper/scraper/pull/263)
- Bump selectors from 0.30.0 to 0.31.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;264](https://redirect.github.com/rust-scraper/scraper/pull/264)

#### New Contributors

- [@&#8203;saschanaz](https://redirect.github.com/saschanaz) made their
first contribution in
[#&#8203;250](https://redirect.github.com/rust-scraper/scraper/pull/250)
- [@&#8203;mina86](https://redirect.github.com/mina86) made their first
contribution in
[#&#8203;263](https://redirect.github.com/rust-scraper/scraper/pull/263)

**Full Changelog**:
<rust-scraper/scraper@v0.23.1...v0.24.0>

###
[`v0.23.1`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.23.1)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.23.0...v0.23.1)

**Full Changelog**:
<rust-scraper/scraper@v0.23.0...v0.23.1>

###
[`v0.23.0`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.23.0)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.22.0...v0.23.0)

#### What's Changed

- Fix README symlink by [@&#8203;hwup](https://redirect.github.com/hwup)
in
[#&#8203;224](https://redirect.github.com/rust-scraper/scraper/pull/224)
- Make `HtmlTreeSink`'s field public by
[@&#8203;max-heller](https://redirect.github.com/max-heller) in
[#&#8203;226](https://redirect.github.com/rust-scraper/scraper/pull/226)
- Bump indexmap from 2.7.0 to 2.7.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;230](https://redirect.github.com/rust-scraper/scraper/pull/230)
- Add a serde feature for (de)serializing Selectors by
[@&#8203;jakubslaby09](https://redirect.github.com/jakubslaby09) in
[#&#8203;227](https://redirect.github.com/rust-scraper/scraper/pull/227)
- Bump serde from 1.0.215 to 1.0.217 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;233](https://redirect.github.com/rust-scraper/scraper/pull/233)
- Bump serde from 1.0.217 to 1.0.218 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;236](https://redirect.github.com/rust-scraper/scraper/pull/236)

#### New Contributors

- [@&#8203;hwup](https://redirect.github.com/hwup) made their first
contribution in
[#&#8203;224](https://redirect.github.com/rust-scraper/scraper/pull/224)
- [@&#8203;max-heller](https://redirect.github.com/max-heller) made
their first contribution in
[#&#8203;226](https://redirect.github.com/rust-scraper/scraper/pull/226)
- [@&#8203;jakubslaby09](https://redirect.github.com/jakubslaby09) made
their first contribution in
[#&#8203;227](https://redirect.github.com/rust-scraper/scraper/pull/227)

**Full Changelog**:
<rust-scraper/scraper@v0.22.0...v0.23.0>

</details>

<details>
<summary>snapview/tokio-tungstenite (tokio-tungstenite)</summary>

###
[`v0.29.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0290)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.28.0...v0.29.0)

- Update `tungstenite` to `0.29.0`. See [`tungstenite`
release](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md).

###
[`v0.28.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0280)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.27.0...v0.28.0)

- Update `tungstenite` to `0.18.0`. See [`tungstenite`
release](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md).

###
[`v0.27.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0270)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.26.2...v0.27.0)

- See [performance updates in
`tungstenite-rs`](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md#0270).

###
[`v0.26.2`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0262)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.26.1...v0.26.2)

- Update `tungstenite`, see [changes
here](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md#0262).

###
[`v0.26.1`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0261)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.26.0...v0.26.1)

- Update `tungstenite` to address an issue that might cause UB in
certain cases.

###
[`v0.26.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0260)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.25.0...v0.26.0)

- Update `tungstenite` to `0.26.0` ([breaking
changes](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md#0260)).

###
[`v0.25.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0250)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.24.0...v0.25.0)

- Update `tungstenite` to `0.25.0` ([important
updates!](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md#0250)).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM ( * 0-3
* * * ) (UTC), 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://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

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

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/processone/fluux-messenger).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDAuMCIsInVwZGF0ZWRJblZlciI6IjQzLjEwMC4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWwiLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Metalhearf pushed a commit to processone/fluux-messenger that referenced this pull request Mar 30, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [ctor](https://redirect.github.com/mmastrac/rust-ctor) | dependencies
| minor | `0.2` → `0.8` |
| [quick-xml](https://redirect.github.com/tafia/quick-xml) |
dependencies | minor | `0.36` → `0.39` |
| [reqwest](https://redirect.github.com/seanmonstar/reqwest) |
dependencies | minor | `0.12` → `0.13` |
| [scraper](https://redirect.github.com/rust-scraper/scraper) |
dependencies | minor | `0.22` → `0.26` |
|
[tokio-tungstenite](https://redirect.github.com/snapview/tokio-tungstenite)
| dependencies | minor | `0.24` → `0.29` |

---

### Release Notes

<details>
<summary>tafia/quick-xml (quick-xml)</summary>

###
[`v0.39.2`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0392----2026-02-20)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.39.1...v0.39.2)

##### New Features

- [#&#8203;483]: Implement `read_text_into()` and
`read_text_into_async()`.

##### Bug Fixes

- [#&#8203;939]: Fix parsing error of the tag from buffered reader, when
the first byte `<`
is the last in the `BufRead` internal buffer. This is the regression
from [#&#8203;936].

[#&#8203;483]: https://redirect.github.com/tafia/quick-xml/issues/483

[#&#8203;936]: https://redirect.github.com/tafia/quick-xml/pull/936

[#&#8203;939]: https://redirect.github.com/tafia/quick-xml/issues/939

###
[`v0.39.1`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0391----2026-02-15)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.39.0...v0.39.1)

##### New Features

- [#&#8203;598]: Add method `NamespaceResolver::set_level` which may be
helpful in some circumstances.

##### Bug Fixes

- [#&#8203;597]: Fix incorrect processing of namespace scopes in
`NsReader::read_to_end`
`NsReader::read_to_end_into`, `NsReader::read_to_end_into_async` and
`NsReader::read_text`.
  The scope started by a start element was not ended after that call.
- [#&#8203;936]: Fix incorrect result of `.read_text()` when it is
called after reading `Text` or `GeneralRef` event.

[#&#8203;597]: https://redirect.github.com/tafia/quick-xml/issues/597

[#&#8203;598]: https://redirect.github.com/tafia/quick-xml/pull/598

[#&#8203;936]: https://redirect.github.com/tafia/quick-xml/pull/936

###
[`v0.39.0`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0390----2026-01-11)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.4...v0.39.0)

Added a way to configure `Writer`. Now all configuration is contained in
the `writer::Config`
struct and can be applied at once. When `serde-types` feature is
enabled, configuration is serializable.

##### New Features

- [#&#8203;846]: Add methods `config()` and `config_mut()` to inspect
and change the writer configuration.
- [#&#8203;846]: Add ability to write space before `/>` in self-closed
tags for maximum compatibility with
  XHTML.
- [#&#8203;846]: Add method `empty_element_handling()` as a more
powerful alternative to `expand_empty_elements()`
  in `Serializer`.
- [#&#8203;929]: Allow to pass list of field names to
`impl_deserialize_for_internally_tagged_enum!` macro
  which is required if you enum variants contains `$value` fields.

##### Bug Fixes

- [#&#8203;923]: Implement correct skipping of well-formed DTD.

##### Misc Changes

- [#&#8203;908]: Increase minimal supported `serde` version from 1.0.139
to 1.0.180.
- [#&#8203;913]: Deprecate `.prefixes()`, `.resolve()`,
`.resolve_attribute()`, and `.resolve_element()`
of `NsReader`. Use `.resolver().bindings()` and `.resolver().resolve()`
methods instead.
- [#&#8203;913]: `Attributes::has_nil` now accepts `NamespaceResolver`
instead of `Reader<R>`.
- [#&#8203;924]: (breaking change) Split
`SyntaxError::UnclosedPIOrXmlDecl` into `UnclosedPI` and
  `UnclosedXmlDecl` for more precise error reporting.
- [#&#8203;924]: (breaking change) `Parser::eof_error` now takes `&self`
and content `&[u8]` parameters.
- [#&#8203;926]: (breaking change) Split `SyntaxError::UnclosedTag` into
`UnclosedTag`,
`UnclosedSingleQuotedAttributeValue` and
`UnclosedDoubleQuotedAttributeValue` for more precise error reporting.

[#&#8203;846]: https://redirect.github.com/tafia/quick-xml/issues/846

[#&#8203;908]: https://redirect.github.com/tafia/quick-xml/pull/908

[#&#8203;913]: https://redirect.github.com/tafia/quick-xml/pull/913

[#&#8203;923]: https://redirect.github.com/tafia/quick-xml/issues/923

[#&#8203;924]: https://redirect.github.com/tafia/quick-xml/pull/924

[#&#8203;926]: https://redirect.github.com/tafia/quick-xml/issues/926

[#&#8203;929]: https://redirect.github.com/tafia/quick-xml/pull/929

###
[`v0.38.4`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0384----2025-11-11)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.3...v0.38.4)

##### New Features

- [#&#8203;353]: Add ability to serialize textual content as CDATA
sections in `Serializer`.
Everywhere where the text node may be created, a CDATA section(s) could
be produced instead.
  See the new [`Serializer::text_format()`] method.

##### Bug Fixes

- [#&#8203;912]: Fix deserialization of numbers, booleans and characters
that is space-wrapped, for example
`<int> 42 </int>`. That space characters are usually indent added during
serialization and
  other XML serialization libraries trims them

##### Misc Changes

- [#&#8203;901]: Fix running tests on 32-bit architecture
- [#&#8203;909]: Avoid some allocations in the `Serializer`

[#&#8203;353]: https://redirect.github.com/tafia/quick-xml/issues/353

[#&#8203;901]: https://redirect.github.com/tafia/quick-xml/pull/901

[#&#8203;909]: https://redirect.github.com/tafia/quick-xml/pull/909

[#&#8203;912]: https://redirect.github.com/tafia/quick-xml/pull/912

[`Serializer::text_format()`]:
https://docs.rs/quick-xml/0.38.4/quick_xml/se/struct.Serializer.html#method.text_format

###
[`v0.38.3`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0383----2025-08-24)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.2...v0.38.3)

##### Bug Fixes

- [#&#8203;895]: Fix incorrect normalization of `\rX` EOL sequences
where `X` is a char which is
  UTF-8 encoded as \[c2 xx], except \[c2 85].

##### Misc Changes

- [#&#8203;895]: Add new `xml10_content()` and `xml11_content()` methods
which behaves the same as
`html_content()` and `xml_content()` methods, but express intention more
clearly.

[#&#8203;895]: https://redirect.github.com/tafia/quick-xml/pull/895

###
[`v0.38.2`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0382----2025-08-19)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.1...v0.38.2)

##### New Features

- [#&#8203;893]: Implement `FusedIterator` for `NamespaceBindingsIter`.
- [#&#8203;893]: Make `NamespaceResolver` public.
- [#&#8203;893]: Add `NsReader::resolver()` for access to namespace
resolver.

##### Misc Changes

- [#&#8203;893]: Rename `PrefixIter` to `NamespaceBindingsIter`.

[#&#8203;893]: https://redirect.github.com/tafia/quick-xml/pull/893

###
[`v0.38.1`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0381----2025-08-03)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.0...v0.38.1)

##### Important changes

To get text in events according to the XML specification (normalized
EOLs) use the
new methods `xml_content()` instead of `decode()`. `Deserializer` uses
new method
automatically.

##### New Features

- [#&#8203;882]: Add new methods to create `Deserializer` from existing
`NsReader`:
  - `Deserializer::borrowing`
  - `Deserializer::borrowing_with_resolver`
  - `Deserializer::buffering`
  - `Deserializer::buffering_with_resolver`
- [#&#8203;878]: Add ability to serialize structs in `$value` fields.
The struct name will
  be used as a tag name. Previously only enums was allowed there.
- [#&#8203;806]: Add `BytesText::xml_content`, `BytesCData::xml_content`
and `BytesRef::xml_content`
  methods which returns XML EOL normalized strings.
- [#&#8203;806]: Add `BytesText::html_content`,
`BytesCData::html_content` and `BytesRef::html_content`
  methods which returns HTML EOL normalized strings.

##### Bug Fixes

- [#&#8203;806]: Properly normalize EOL characters in `Deserializer`.
- [#&#8203;888]: Properly split attribute values by items when
deserialize attribute into
  list of values and attribute requires decoding.

[#&#8203;806]: https://redirect.github.com/tafia/quick-xml/issues/806

[#&#8203;878]: https://redirect.github.com/tafia/quick-xml/pull/878

[#&#8203;882]: https://redirect.github.com/tafia/quick-xml/pull/882

[#&#8203;888]: https://redirect.github.com/tafia/quick-xml/pull/888

###
[`v0.38.0`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0380----2025-06-28)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.5...v0.38.0)

##### Significant changes

Now references to entities (as predefined, such as `&lt;`, as
user-defined) reported as a new
`Event::GeneralRef`.
Caller can parse the content of the entity and stream events from it as
it is required by the
XML specification. See the updated `custom_entities` example!

Implement whitespace behavior in the standard in `Deserializer`, which
says string primitive
types should preserve whitespace, while all other primitives have
collapse behavior.

##### New Features

- [#&#8203;863]: Add `Attributes::into_map_access(&str)` and
`Attributes::into_deserializer()` when `serialize`
feature is enabled. This will allow do deserialize serde types right
from attributes. Both methods
returns the same type which implements serde's `Deserializer` and
`MapAccess` traits.
- [#&#8203;766]: Allow to parse resolved entities as XML fragments and
stream events from them.
- [#&#8203;766]: Added new event `Event::GeneralRef` with content of
[general entity].
- [#&#8203;766]: Added new configuration option `allow_dangling_amp`
which allows to have
a `&` not followed by `;` in the textual data which is required for some
applications
  for compatibility reasons.
- [#&#8203;285]: Add ability to `quick_xml::de::Text` to access text
with trimmed spaces

##### Bug Fixes

- [#&#8203;868]: Allow to have both `$text` and `$value` special fields
in one struct. Previously
any text will be recognized as `$value` field even when `$text` field is
also presented.
- [#&#8203;868]: Skip text events when deserialize a sequence of items
overlapped with text (including CDATA).
- [#&#8203;841]: Do not strip `xml` prefix from the attributes when map
them to struct fields in `Deserializer`.

##### Misc Changes

- [#&#8203;863]: Remove `From<QName<'a>> for BytesStart<'a>` because now
`BytesStart` stores the
encoding in which its data is encoded, but `QName` is a simple wrapper
around byte slice.
- [#&#8203;766]: `BytesText::unescape` and `BytesText::unescape_with`
replaced by `BytesText::decode`.
Now Text events does not contain escaped parts which are reported as
`Event::GeneralRef`.

[#&#8203;285]: https://redirect.github.com/tafia/quick-xml/issues/285

[#&#8203;766]: https://redirect.github.com/tafia/quick-xml/pull/766

[#&#8203;841]: https://redirect.github.com/tafia/quick-xml/issues/841

[#&#8203;863]: https://redirect.github.com/tafia/quick-xml/pull/863

[#&#8203;868]: https://redirect.github.com/tafia/quick-xml/pull/868

[general entity]: https://www.w3.org/TR/xml11/#gen-entity

###
[`v0.37.5`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0375----2025-04-27)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.4...v0.37.5)

##### New Features

- [#&#8203;857]: Add `BytesCData::decode()`.

[#&#8203;857]: https://redirect.github.com/tafia/quick-xml/pull/857

###
[`v0.37.4`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0374----2025-04-01)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.3...v0.37.4)

##### Misc Changes

- [#&#8203;852]: Add `Debug` impl for `NsReader` and `Reader` and
`Clone` impl for `NsReader`

[#&#8203;852]: https://redirect.github.com/tafia/quick-xml/pull/852

###
[`v0.37.3`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0373----2025-03-25)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.2...v0.37.3)

##### New Features

- [#&#8203;850]: Add `Attribute::as_bool()` method to get an attribute
value as a boolean.
- [#&#8203;850]: Add `Attributes::has_nil()` method to check if
attributes has `xsi:nil` attribute set to `true`.
- [#&#8203;497]: Handle `xsi:nil` attribute in serde Deserializer to
better process optional fields.

[#&#8203;497]: https://redirect.github.com/tafia/quick-xml/issues/497

[#&#8203;850]: https://redirect.github.com/tafia/quick-xml/pull/850

###
[`v0.37.2`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0372----2024-12-29)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.1...v0.37.2)

##### New Features

- [#&#8203;836]: Add `se::to_utf8_io_writer()` helper compatible with
`std::io::Write` and restricted to UTF-8 encoding.

[#&#8203;836]: https://redirect.github.com/tafia/quick-xml/pull/836

###
[`v0.37.1`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0371----2024-11-17)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.0...v0.37.1)

##### New Features

- [#&#8203;831]: Add `BytesCData::escaped()` fn to construct CDATA
events from arbitrary user input.

[#&#8203;831]: https://redirect.github.com/tafia/quick-xml/issues/831

###
[`v0.37.0`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0370----2024-10-27)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.36.2...v0.37.0)

##### New Features

- [#&#8203;826]: Implement `From<String>` and `From<Cow<str>>` for
`quick_xml::de::Text`.
- [#&#8203;826]: Make `SimpleTypeDeserializer` and
`SimpleTypeSerializer` public.
- [#&#8203;826]: Implement `IntoDeserializer` for `&mut Deserializer`.

##### Bug Fixes

- [#&#8203;655]: Do not write indent before and after `$text` fields and
those `$value` fields
  that are serialized as a text (for example, `usize` or `String`).
- [#&#8203;826]: Handle only those boolean representations that are
allowed by [Xml Schema]
which is only `"true"`, `"1"`, `"false"`, and `"0"`. Previously the
following values
  also was accepted:
| `bool` | XML content |
| ------- |
------------------------------------------------------------- |
| `true` | `"True"`, `"TRUE"`, `"t"`, `"Yes"`, `"YES"`, `"yes"`, `"y"` |
| `false` | `"False"`, `"FALSE"`, `"f"`, `"No"`, `"NO"`, `"no"`, `"n"` |

##### Misc Changes

- [#&#8203;227]: Split `SeError` from `DeError` in the `serialize`
feature.
  Serialize functions and methods now return `SeError`.
- [#&#8203;810]: Return `std::io::Error` from `Writer` methods.
- [#&#8203;811]: Split `NamespaceError` and `EncodingError` from
`Error`.
- [#&#8203;811]: Renamed `Error::EscapeError` to `Error::Escape` to
match other variants.
- [#&#8203;811]: Narrow down error return type from `Error` where only
one variant is ever returned:
attribute related methods on `BytesStart` and `BytesDecl` returns
`AttrError`
- [#&#8203;820]: Classify output of the `Serializer` by returning an
enumeration with kind of written data
- [#&#8203;823]: Do not allow serialization of consequent primitives,
for example `Vec<usize>` or
`Vec<String>` in `$value` fields. They cannot be deserialized back with
the same result
- [#&#8203;827]: Make `escape` and it variants take a `impl
Into<Cow<str>>` argument and implement
  `From<(&'a str, Cow<'a, str>)>` on `Attribute`
- [#&#8203;826]: Removed `DeError::InvalidInt`, `DeError::InvalidFloat`
and `DeError::InvalidBoolean`.
Now the responsibility for returning the error lies with the visitor of
the type.
See rationale in
[serde-rs/serde#2811](https://redirect.github.com/serde-rs/serde/pull/2811)

[#&#8203;227]: https://redirect.github.com/tafia/quick-xml/issues/227

[#&#8203;655]: https://redirect.github.com/tafia/quick-xml/issues/655

[#&#8203;810]: https://redirect.github.com/tafia/quick-xml/pull/810

[#&#8203;811]: https://redirect.github.com/tafia/quick-xml/pull/811

[#&#8203;820]: https://redirect.github.com/tafia/quick-xml/pull/820

[#&#8203;823]: https://redirect.github.com/tafia/quick-xml/pull/823

[#&#8203;826]: https://redirect.github.com/tafia/quick-xml/pull/826

[#&#8203;827]: https://redirect.github.com/tafia/quick-xml/pull/827

[Xml Schema]: https://www.w3.org/TR/xmlschema11-2/#boolean

</details>

<details>
<summary>seanmonstar/reqwest (reqwest)</summary>

###
[`v0.13.2`](https://redirect.github.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v0132)

[Compare
Source](https://redirect.github.com/seanmonstar/reqwest/compare/v0.13.1...v0.13.2)

- Fix HTTP/2 and native-tls ALPN feature combinations.
- Fix HTTP/3 to send h3 ALPN.
- (wasm) fix `RequestBuilder::json()` from override previously set
content-type.

###
[`v0.13.1`](https://redirect.github.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v0131)

[Compare
Source](https://redirect.github.com/seanmonstar/reqwest/compare/v0.13.0...v0.13.1)

- Fixes compiling with rustls on Android targets.

###
[`v0.13.0`](https://redirect.github.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v0130)

[Compare
Source](https://redirect.github.com/seanmonstar/reqwest/compare/v0.12.28...v0.13.0)

- **Breaking changes**:
  - `rustls` is now the default TLS backend, instead of `native-tls`.
- `rustls` crypto provider defaults to aws-lc instead of *ring*.
(`rustls-no-provider` exists if you want a different crypto provider)
  - `rustls-tls` has been renamed to `rustls`.
- rustls roots features removed, `rustls-platform-verifier` is used by
default.
    - To use different roots, call `tls_certs_only(your_roots)`.
- `native-tls` now includes ALPN. To disable, use `native-tls-no-alpn`.
  - `query` and `form` are now crate features, disabled by default.
- Long-deprecated methods and crate features have been removed (such as
`trust-dns`, which was renamed `hickory-dns` a while ago).
- Many TLS-related methods renamed to improve autocompletion and
discovery, but previous name left in place with a "soft" deprecation.
(just documented, no warnings)
  - For example, prefer `tls_backend_rustls()` over `use_rustls_tls()`.

#### v0.12.28

- Fix compiling on Windows if TLS and SOCKS features are not enabled.

#### v0.12.27

- Add `ClientBuilder::windows_named_pipe(name)` option that will force
all requests over that Windows Named Piper.

#### v0.12.26

- Fix sending `Accept-Encoding` header only with values configured with
reqwest, regardless of underlying tower-http config.

#### v0.12.25

- Add `Error::is_upgrade()` to determine if the error was from an HTTP
upgrade.
- Fix sending `Proxy-Authorization` if only username is configured.
- Fix sending `Proxy-Authorization` to HTTPS proxies when the target is
HTTP.
- Refactor internal decompression handling to use tower-http.

#### v0.12.24

- Refactor cookie handling to an internal middleware.
- Refactor internal random generator.
- Refactor base64 encoding to reduce a copy.
- Documentation updates.

#### v0.12.23

- Add `ClientBuilder::unix_socket(path)` option that will force all
requests over that Unix Domain Socket.
- Add `ClientBuilder::retry(policy)` and `reqwest::retry::Builder` to
configure automatic retries.
- Add `ClientBuilder::dns_resolver2()` with more ergonomic argument
bounds, allowing more resolver implementations.
- Add `http3_*` options to `blocking::ClientBuilder`.
- Fix default TCP timeout values to enabled and faster.
- Fix SOCKS proxies to default to port 1080
- (wasm) Add cache methods to `RequestBuilder`.

#### v0.12.22

- Fix socks proxies when resolving IPv6 destinations.

#### v0.12.21

- Fix socks proxy to use `socks4a://` instead of `socks4h://`.
- Fix `Error::is_timeout()` to check for hyper and IO timeouts too.
- Fix request `Error` to again include URLs when possible.
- Fix socks connect error to include more context.
- (wasm) implement `Default` for `Body`.

#### v0.12.20

- Add `ClientBuilder::tcp_user_timeout(Duration)` option to set
`TCP_USER_TIMEOUT`.
- Fix proxy headers only using the first matched proxy.
- (wasm) Fix re-adding `Error::is_status()`.

#### v0.12.19

- Fix redirect that changes the method to GET should remove payload
headers.
- Fix redirect to only check the next scheme if the policy action is to
follow.
- (wasm) Fix compilation error if `cookies` feature is enabled (by the
way, it's a noop feature in wasm).

#### v0.12.18

- Fix compilation when `socks` enabled without TLS.

#### v0.12.17

- Fix compilation on macOS.

#### v0.12.16

- Add `ClientBuilder::http3_congestion_bbr()` to enable BBR congestion
control.
- Add `ClientBuilder::http3_send_grease()` to configure whether to send
use QUIC grease.
- Add `ClientBuilder::http3_max_field_section_size()` to configure the
maximum response headers.
- Add `ClientBuilder::tcp_keepalive_interval()` to configure TCP probe
interval.
- Add `ClientBuilder::tcp_keepalive_retries()` to configure TCP probe
count.
- Add `Proxy::headers()` to add extra headers that should be sent to a
proxy.
- Fix `redirect::Policy::limit()` which had an off-by-1 error, allowing
1 more redirect than specified.
- Fix HTTP/3 to support streaming request bodies.
- (wasm) Fix null bodies when calling `Response::bytes_stream()`.

#### v0.12.15

- Fix Windows to support both `ProxyOverride` and `NO_PROXY`.
- Fix http3 to support streaming response bodies.
- Fix http3 dependency from public API misuse.

#### v0.12.14

- Fix missing `fetch_mode_no_cors()`, marking as deprecated when not on
WASM.

#### v0.12.13

- Add `Form::into_reader()` for blocking `multipart` forms.
- Add `Form::into_stream()` for async `multipart` forms.
- Add support for SOCKS4a proxies.
- Fix decoding responses with multiple zstd frames.
- Fix `RequestBuilder::form()` from overwriting a previously set
`Content-Type` header, like the other builder methods.
- Fix cloning of request timeout in `blocking::Request`.
- Fix http3 synchronization of connection creation, reducing unneccesary
extra connections.
- Fix Windows system proxy to use `ProxyOverride` as a `NO_PROXY` value.
- Fix blocking read to correctly reserve and zero read buffer.
- (wasm) Add support for request timeouts.
- (wasm) Fix `Error::is_timeout()` to return true when from a request
timeout.

#### v0.12.12

- (wasm) Fix compilation by not compiler `tokio/time` on WASM.

#### v0.12.11

- Fix decompression returning an error when HTTP/2 ends with an empty
data frame.

#### v0.12.10

- Add `ClientBuilder::connector_layer()` to allow customizing the
connector stack.
- Add `ClientBuilder::http2_max_header_list_size()` option.
- Fix propagating body size hint (`content-length`) information when
wrapping bodies.
- Fix decompression of chunked bodies so the connections can be reused
more often.

#### v0.12.9

- Add `tls::CertificateRevocationLists` support.
- Add crate features to enable webpki roots without selecting a rustls
provider.
- Fix `connection_verbose()` to output read logs.
- Fix `multipart::Part::file()` to automatically include content-length.
- Fix proxy to internally no longer cache system proxy settings.

#### v0.12.8

- Add support for SOCKS4 proxies.
- Add `multipart::Form::file()` method for adding files easily.
- Add `Body::wrap()` to wrap any `http_body::Body` type.
- Fix the pool configuration to use a timer to remove expired
connections.

#### v0.12.7

- Revert adding `impl Service<http::Request<_>>` for `Client`.

#### v0.12.6

- Add support for `danger_accept_invalid_hostnames` for `rustls`.
- Add `impl Service<http::Request<Body>>` for `Client` and `&'_ Client`.
- Add support for `!Sync` bodies in `Body::wrap_stream()`.
- Enable happy eyeballs when `hickory-dns` is used.
- Fix `Proxy` so that `HTTP(S)_PROXY` values take precedence over
`ALL_PROXY`.
- Fix `blocking::RequestBuilder::header()` from unsetting `sensitive` on
passed header values.

#### v0.12.5

- Add `blocking::ClientBuilder::dns_resolver()` method to change DNS
resolver in blocking client.
- Add `http3` feature back, still requiring `reqwest_unstable`.
- Add `rustls-tls-no-provider` Cargo feature to use rustls without a
crypto provider.
- Fix `Accept-Encoding` header combinations.
- Fix http3 resolving IPv6 addresses.
- Internal: upgrade to rustls 0.23.

#### v0.12.4

- Add `zstd` support, enabled with `zstd` Cargo feature.
- Add `ClientBuilder::read_timeout(Duration)`, which applies the
duration for each read operation. The timeout resets after a successful
read.

#### v0.12.3

- Add `FromStr` for `dns::Name`.
- Add `ClientBuilder::built_in_webpki_certs(bool)` to enable them
separately.
- Add `ClientBuilder::built_in_native_certs(bool)` to enable them
separately.
- Fix sending `content-length: 0` for GET requests.
- Fix response body `content_length()` to return value when timeout is
configured.
- Fix `ClientBuilder::resolve()` to use lowercase domain names.

#### v0.12.2

- Fix missing ALPN when connecting to socks5 proxy with rustls.
- Fix TLS version limits with rustls.
- Fix not detected ALPN h2 from server with native-tls.

#### v0.12.1

- Fix `ClientBuilder::interface()` when no TLS is enabled.
- Fix `TlsInfo::peer_certificate()` being truncated with rustls.
- Fix panic if `http2` feature disabled but TLS negotiated h2 in ALPN.
- Fix `Display` for `Error` to not include its source error.

</details>

<details>
<summary>rust-scraper/scraper (scraper)</summary>

###
[`v0.26.0`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.26.0)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.25.0...v0.26.0)

#### What's Changed

- fix dom manipulation example by
[@&#8203;JayceFayne](https://redirect.github.com/JayceFayne) in
[#&#8203;292](https://redirect.github.com/rust-scraper/scraper/pull/292)
- Bump selectors from 0.33.0 to 0.35.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;298](https://redirect.github.com/rust-scraper/scraper/pull/298)
- Bump indexmap from 2.12.1 to 2.13.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;294](https://redirect.github.com/rust-scraper/scraper/pull/294)
- Upgrade ego-tree to 0.11.0 and html5ever to 0.37.1 by
[@&#8203;cfvescovo](https://redirect.github.com/cfvescovo) in
[#&#8203;300](https://redirect.github.com/rust-scraper/scraper/pull/300)
- Bump html5ever from 0.37.1 to 0.38.0 by
[@&#8203;mohe2015](https://redirect.github.com/mohe2015) in
[#&#8203;303](https://redirect.github.com/rust-scraper/scraper/pull/303)
- Bump selectors from 0.35.0 to 0.36.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;307](https://redirect.github.com/rust-scraper/scraper/pull/307)
- Bump html5ever from 0.38.0 to 0.39.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;308](https://redirect.github.com/rust-scraper/scraper/pull/308)
- Version 0.26.0 by
[@&#8203;adamreichold](https://redirect.github.com/adamreichold) in
[#&#8203;306](https://redirect.github.com/rust-scraper/scraper/pull/306)

#### New Contributors

- [@&#8203;JayceFayne](https://redirect.github.com/JayceFayne) made
their first contribution in
[#&#8203;292](https://redirect.github.com/rust-scraper/scraper/pull/292)

**Full Changelog**:
<rust-scraper/scraper@v0.25.0...v0.26.0>

###
[`v0.25.0`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.25.0)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.24.0...v0.25.0)

#### What's Changed

- chore(Cargo.toml): bump servo to 0.36.0 by
[@&#8203;Jan9103](https://redirect.github.com/Jan9103) in
[#&#8203;280](https://redirect.github.com/rust-scraper/scraper/pull/280)
- Add version flag in executable by
[@&#8203;kachick](https://redirect.github.com/kachick) in
[#&#8203;282](https://redirect.github.com/rust-scraper/scraper/pull/282)
- Avoid panic for unknown flags and invalid selectors when using
executable by [@&#8203;kachick](https://redirect.github.com/kachick) in
[#&#8203;283](https://redirect.github.com/rust-scraper/scraper/pull/283)
- Update repo URL by
[@&#8203;atouchet](https://redirect.github.com/atouchet) in
[#&#8203;286](https://redirect.github.com/rust-scraper/scraper/pull/286)
- Added cargo deny to test github action by
[@&#8203;haydonryan](https://redirect.github.com/haydonryan) in
[#&#8203;287](https://redirect.github.com/rust-scraper/scraper/pull/287)

#### New Contributors

- [@&#8203;Jan9103](https://redirect.github.com/Jan9103) made their
first contribution in
[#&#8203;280](https://redirect.github.com/rust-scraper/scraper/pull/280)
- [@&#8203;kachick](https://redirect.github.com/kachick) made their
first contribution in
[#&#8203;282](https://redirect.github.com/rust-scraper/scraper/pull/282)
- [@&#8203;atouchet](https://redirect.github.com/atouchet) made their
first contribution in
[#&#8203;286](https://redirect.github.com/rust-scraper/scraper/pull/286)
- [@&#8203;haydonryan](https://redirect.github.com/haydonryan) made
their first contribution in
[#&#8203;287](https://redirect.github.com/rust-scraper/scraper/pull/287)

**Full Changelog**:
<rust-scraper/scraper@v0.24.0...v0.25.0>

###
[`v0.24.0`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.24.0)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.23.1...v0.24.0)

#### What's Changed

- Bump depedencies, especially html5ever, cssparser, selectors which
must be bumped together. by
[@&#8203;adamreichold](https://redirect.github.com/adamreichold) in
[#&#8203;249](https://redirect.github.com/rust-scraper/scraper/pull/249)
- Bump `selectors` to v0.28 by
[@&#8203;paolobarbolini](https://redirect.github.com/paolobarbolini) in
[#&#8203;251](https://redirect.github.com/rust-scraper/scraper/pull/251)
- Bump getopts from 0.2.21 to 0.2.22 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;254](https://redirect.github.com/rust-scraper/scraper/pull/254)
- Recreate README.md as a non-symlink by
[@&#8203;saschanaz](https://redirect.github.com/saschanaz) in
[#&#8203;250](https://redirect.github.com/rust-scraper/scraper/pull/250)
- Bump selectors from 0.28.0 to 0.29.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;257](https://redirect.github.com/rust-scraper/scraper/pull/257)
- Bump html5ever and selectors dependencies by
[@&#8203;mina86](https://redirect.github.com/mina86) in
[#&#8203;263](https://redirect.github.com/rust-scraper/scraper/pull/263)
- Bump selectors from 0.30.0 to 0.31.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;264](https://redirect.github.com/rust-scraper/scraper/pull/264)

#### New Contributors

- [@&#8203;saschanaz](https://redirect.github.com/saschanaz) made their
first contribution in
[#&#8203;250](https://redirect.github.com/rust-scraper/scraper/pull/250)
- [@&#8203;mina86](https://redirect.github.com/mina86) made their first
contribution in
[#&#8203;263](https://redirect.github.com/rust-scraper/scraper/pull/263)

**Full Changelog**:
<rust-scraper/scraper@v0.23.1...v0.24.0>

###
[`v0.23.1`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.23.1)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.23.0...v0.23.1)

**Full Changelog**:
<rust-scraper/scraper@v0.23.0...v0.23.1>

###
[`v0.23.0`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.23.0)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.22.0...v0.23.0)

#### What's Changed

- Fix README symlink by [@&#8203;hwup](https://redirect.github.com/hwup)
in
[#&#8203;224](https://redirect.github.com/rust-scraper/scraper/pull/224)
- Make `HtmlTreeSink`'s field public by
[@&#8203;max-heller](https://redirect.github.com/max-heller) in
[#&#8203;226](https://redirect.github.com/rust-scraper/scraper/pull/226)
- Bump indexmap from 2.7.0 to 2.7.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;230](https://redirect.github.com/rust-scraper/scraper/pull/230)
- Add a serde feature for (de)serializing Selectors by
[@&#8203;jakubslaby09](https://redirect.github.com/jakubslaby09) in
[#&#8203;227](https://redirect.github.com/rust-scraper/scraper/pull/227)
- Bump serde from 1.0.215 to 1.0.217 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;233](https://redirect.github.com/rust-scraper/scraper/pull/233)
- Bump serde from 1.0.217 to 1.0.218 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;236](https://redirect.github.com/rust-scraper/scraper/pull/236)

#### New Contributors

- [@&#8203;hwup](https://redirect.github.com/hwup) made their first
contribution in
[#&#8203;224](https://redirect.github.com/rust-scraper/scraper/pull/224)
- [@&#8203;max-heller](https://redirect.github.com/max-heller) made
their first contribution in
[#&#8203;226](https://redirect.github.com/rust-scraper/scraper/pull/226)
- [@&#8203;jakubslaby09](https://redirect.github.com/jakubslaby09) made
their first contribution in
[#&#8203;227](https://redirect.github.com/rust-scraper/scraper/pull/227)

**Full Changelog**:
<rust-scraper/scraper@v0.22.0...v0.23.0>

</details>

<details>
<summary>snapview/tokio-tungstenite (tokio-tungstenite)</summary>

###
[`v0.29.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0290)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.28.0...v0.29.0)

- Update `tungstenite` to `0.29.0`. See [`tungstenite`
release](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md).

###
[`v0.28.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0280)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.27.0...v0.28.0)

- Update `tungstenite` to `0.18.0`. See [`tungstenite`
release](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md).

###
[`v0.27.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0270)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.26.2...v0.27.0)

- See [performance updates in
`tungstenite-rs`](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md#0270).

###
[`v0.26.2`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0262)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.26.1...v0.26.2)

- Update `tungstenite`, see [changes
here](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md#0262).

###
[`v0.26.1`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0261)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.26.0...v0.26.1)

- Update `tungstenite` to address an issue that might cause UB in
certain cases.

###
[`v0.26.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0260)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.25.0...v0.26.0)

- Update `tungstenite` to `0.26.0` ([breaking
changes](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md#0260)).

###
[`v0.25.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0250)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.24.0...v0.25.0)

- Update `tungstenite` to `0.25.0` ([important
updates!](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md#0250)).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM ( * 0-3
* * * ) (UTC), 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://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

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

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/processone/fluux-messenger).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDAuMCIsInVwZGF0ZWRJblZlciI6IjQzLjEwMC4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWwiLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate Bot added a commit to processone/fluux-messenger that referenced this pull request Mar 31, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [ctor](https://redirect.github.com/mmastrac/rust-ctor) | dependencies
| minor | `0.2` → `0.8` |
| [quick-xml](https://redirect.github.com/tafia/quick-xml) |
dependencies | minor | `0.36` → `0.39` |
| [reqwest](https://redirect.github.com/seanmonstar/reqwest) |
dependencies | minor | `0.12` → `0.13` |
| [scraper](https://redirect.github.com/rust-scraper/scraper) |
dependencies | minor | `0.22` → `0.26` |
|
[tokio-tungstenite](https://redirect.github.com/snapview/tokio-tungstenite)
| dependencies | minor | `0.24` → `0.29` |

---

### Release Notes

<details>
<summary>tafia/quick-xml (quick-xml)</summary>

###
[`v0.39.2`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0392----2026-02-20)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.39.1...v0.39.2)

##### New Features

- [#&#8203;483]: Implement `read_text_into()` and
`read_text_into_async()`.

##### Bug Fixes

- [#&#8203;939]: Fix parsing error of the tag from buffered reader, when
the first byte `<`
is the last in the `BufRead` internal buffer. This is the regression
from [#&#8203;936].

[#&#8203;483]: https://redirect.github.com/tafia/quick-xml/issues/483

[#&#8203;936]: https://redirect.github.com/tafia/quick-xml/pull/936

[#&#8203;939]: https://redirect.github.com/tafia/quick-xml/issues/939

###
[`v0.39.1`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0391----2026-02-15)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.39.0...v0.39.1)

##### New Features

- [#&#8203;598]: Add method `NamespaceResolver::set_level` which may be
helpful in some circumstances.

##### Bug Fixes

- [#&#8203;597]: Fix incorrect processing of namespace scopes in
`NsReader::read_to_end`
`NsReader::read_to_end_into`, `NsReader::read_to_end_into_async` and
`NsReader::read_text`.
  The scope started by a start element was not ended after that call.
- [#&#8203;936]: Fix incorrect result of `.read_text()` when it is
called after reading `Text` or `GeneralRef` event.

[#&#8203;597]: https://redirect.github.com/tafia/quick-xml/issues/597

[#&#8203;598]: https://redirect.github.com/tafia/quick-xml/pull/598

[#&#8203;936]: https://redirect.github.com/tafia/quick-xml/pull/936

###
[`v0.39.0`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0390----2026-01-11)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.4...v0.39.0)

Added a way to configure `Writer`. Now all configuration is contained in
the `writer::Config`
struct and can be applied at once. When `serde-types` feature is
enabled, configuration is serializable.

##### New Features

- [#&#8203;846]: Add methods `config()` and `config_mut()` to inspect
and change the writer configuration.
- [#&#8203;846]: Add ability to write space before `/>` in self-closed
tags for maximum compatibility with
  XHTML.
- [#&#8203;846]: Add method `empty_element_handling()` as a more
powerful alternative to `expand_empty_elements()`
  in `Serializer`.
- [#&#8203;929]: Allow to pass list of field names to
`impl_deserialize_for_internally_tagged_enum!` macro
  which is required if you enum variants contains `$value` fields.

##### Bug Fixes

- [#&#8203;923]: Implement correct skipping of well-formed DTD.

##### Misc Changes

- [#&#8203;908]: Increase minimal supported `serde` version from 1.0.139
to 1.0.180.
- [#&#8203;913]: Deprecate `.prefixes()`, `.resolve()`,
`.resolve_attribute()`, and `.resolve_element()`
of `NsReader`. Use `.resolver().bindings()` and `.resolver().resolve()`
methods instead.
- [#&#8203;913]: `Attributes::has_nil` now accepts `NamespaceResolver`
instead of `Reader<R>`.
- [#&#8203;924]: (breaking change) Split
`SyntaxError::UnclosedPIOrXmlDecl` into `UnclosedPI` and
  `UnclosedXmlDecl` for more precise error reporting.
- [#&#8203;924]: (breaking change) `Parser::eof_error` now takes `&self`
and content `&[u8]` parameters.
- [#&#8203;926]: (breaking change) Split `SyntaxError::UnclosedTag` into
`UnclosedTag`,
`UnclosedSingleQuotedAttributeValue` and
`UnclosedDoubleQuotedAttributeValue` for more precise error reporting.

[#&#8203;846]: https://redirect.github.com/tafia/quick-xml/issues/846

[#&#8203;908]: https://redirect.github.com/tafia/quick-xml/pull/908

[#&#8203;913]: https://redirect.github.com/tafia/quick-xml/pull/913

[#&#8203;923]: https://redirect.github.com/tafia/quick-xml/issues/923

[#&#8203;924]: https://redirect.github.com/tafia/quick-xml/pull/924

[#&#8203;926]: https://redirect.github.com/tafia/quick-xml/issues/926

[#&#8203;929]: https://redirect.github.com/tafia/quick-xml/pull/929

###
[`v0.38.4`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0384----2025-11-11)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.3...v0.38.4)

##### New Features

- [#&#8203;353]: Add ability to serialize textual content as CDATA
sections in `Serializer`.
Everywhere where the text node may be created, a CDATA section(s) could
be produced instead.
  See the new [`Serializer::text_format()`] method.

##### Bug Fixes

- [#&#8203;912]: Fix deserialization of numbers, booleans and characters
that is space-wrapped, for example
`<int> 42 </int>`. That space characters are usually indent added during
serialization and
  other XML serialization libraries trims them

##### Misc Changes

- [#&#8203;901]: Fix running tests on 32-bit architecture
- [#&#8203;909]: Avoid some allocations in the `Serializer`

[#&#8203;353]: https://redirect.github.com/tafia/quick-xml/issues/353

[#&#8203;901]: https://redirect.github.com/tafia/quick-xml/pull/901

[#&#8203;909]: https://redirect.github.com/tafia/quick-xml/pull/909

[#&#8203;912]: https://redirect.github.com/tafia/quick-xml/pull/912

[`Serializer::text_format()`]:
https://docs.rs/quick-xml/0.38.4/quick_xml/se/struct.Serializer.html#method.text_format

###
[`v0.38.3`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0383----2025-08-24)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.2...v0.38.3)

##### Bug Fixes

- [#&#8203;895]: Fix incorrect normalization of `\rX` EOL sequences
where `X` is a char which is
  UTF-8 encoded as \[c2 xx], except \[c2 85].

##### Misc Changes

- [#&#8203;895]: Add new `xml10_content()` and `xml11_content()` methods
which behaves the same as
`html_content()` and `xml_content()` methods, but express intention more
clearly.

[#&#8203;895]: https://redirect.github.com/tafia/quick-xml/pull/895

###
[`v0.38.2`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0382----2025-08-19)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.1...v0.38.2)

##### New Features

- [#&#8203;893]: Implement `FusedIterator` for `NamespaceBindingsIter`.
- [#&#8203;893]: Make `NamespaceResolver` public.
- [#&#8203;893]: Add `NsReader::resolver()` for access to namespace
resolver.

##### Misc Changes

- [#&#8203;893]: Rename `PrefixIter` to `NamespaceBindingsIter`.

[#&#8203;893]: https://redirect.github.com/tafia/quick-xml/pull/893

###
[`v0.38.1`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0381----2025-08-03)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.38.0...v0.38.1)

##### Important changes

To get text in events according to the XML specification (normalized
EOLs) use the
new methods `xml_content()` instead of `decode()`. `Deserializer` uses
new method
automatically.

##### New Features

- [#&#8203;882]: Add new methods to create `Deserializer` from existing
`NsReader`:
  - `Deserializer::borrowing`
  - `Deserializer::borrowing_with_resolver`
  - `Deserializer::buffering`
  - `Deserializer::buffering_with_resolver`
- [#&#8203;878]: Add ability to serialize structs in `$value` fields.
The struct name will
  be used as a tag name. Previously only enums was allowed there.
- [#&#8203;806]: Add `BytesText::xml_content`, `BytesCData::xml_content`
and `BytesRef::xml_content`
  methods which returns XML EOL normalized strings.
- [#&#8203;806]: Add `BytesText::html_content`,
`BytesCData::html_content` and `BytesRef::html_content`
  methods which returns HTML EOL normalized strings.

##### Bug Fixes

- [#&#8203;806]: Properly normalize EOL characters in `Deserializer`.
- [#&#8203;888]: Properly split attribute values by items when
deserialize attribute into
  list of values and attribute requires decoding.

[#&#8203;806]: https://redirect.github.com/tafia/quick-xml/issues/806

[#&#8203;878]: https://redirect.github.com/tafia/quick-xml/pull/878

[#&#8203;882]: https://redirect.github.com/tafia/quick-xml/pull/882

[#&#8203;888]: https://redirect.github.com/tafia/quick-xml/pull/888

###
[`v0.38.0`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0380----2025-06-28)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.5...v0.38.0)

##### Significant changes

Now references to entities (as predefined, such as `&lt;`, as
user-defined) reported as a new
`Event::GeneralRef`.
Caller can parse the content of the entity and stream events from it as
it is required by the
XML specification. See the updated `custom_entities` example!

Implement whitespace behavior in the standard in `Deserializer`, which
says string primitive
types should preserve whitespace, while all other primitives have
collapse behavior.

##### New Features

- [#&#8203;863]: Add `Attributes::into_map_access(&str)` and
`Attributes::into_deserializer()` when `serialize`
feature is enabled. This will allow do deserialize serde types right
from attributes. Both methods
returns the same type which implements serde's `Deserializer` and
`MapAccess` traits.
- [#&#8203;766]: Allow to parse resolved entities as XML fragments and
stream events from them.
- [#&#8203;766]: Added new event `Event::GeneralRef` with content of
[general entity].
- [#&#8203;766]: Added new configuration option `allow_dangling_amp`
which allows to have
a `&` not followed by `;` in the textual data which is required for some
applications
  for compatibility reasons.
- [#&#8203;285]: Add ability to `quick_xml::de::Text` to access text
with trimmed spaces

##### Bug Fixes

- [#&#8203;868]: Allow to have both `$text` and `$value` special fields
in one struct. Previously
any text will be recognized as `$value` field even when `$text` field is
also presented.
- [#&#8203;868]: Skip text events when deserialize a sequence of items
overlapped with text (including CDATA).
- [#&#8203;841]: Do not strip `xml` prefix from the attributes when map
them to struct fields in `Deserializer`.

##### Misc Changes

- [#&#8203;863]: Remove `From<QName<'a>> for BytesStart<'a>` because now
`BytesStart` stores the
encoding in which its data is encoded, but `QName` is a simple wrapper
around byte slice.
- [#&#8203;766]: `BytesText::unescape` and `BytesText::unescape_with`
replaced by `BytesText::decode`.
Now Text events does not contain escaped parts which are reported as
`Event::GeneralRef`.

[#&#8203;285]: https://redirect.github.com/tafia/quick-xml/issues/285

[#&#8203;766]: https://redirect.github.com/tafia/quick-xml/pull/766

[#&#8203;841]: https://redirect.github.com/tafia/quick-xml/issues/841

[#&#8203;863]: https://redirect.github.com/tafia/quick-xml/pull/863

[#&#8203;868]: https://redirect.github.com/tafia/quick-xml/pull/868

[general entity]: https://www.w3.org/TR/xml11/#gen-entity

###
[`v0.37.5`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0375----2025-04-27)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.4...v0.37.5)

##### New Features

- [#&#8203;857]: Add `BytesCData::decode()`.

[#&#8203;857]: https://redirect.github.com/tafia/quick-xml/pull/857

###
[`v0.37.4`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0374----2025-04-01)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.3...v0.37.4)

##### Misc Changes

- [#&#8203;852]: Add `Debug` impl for `NsReader` and `Reader` and
`Clone` impl for `NsReader`

[#&#8203;852]: https://redirect.github.com/tafia/quick-xml/pull/852

###
[`v0.37.3`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0373----2025-03-25)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.2...v0.37.3)

##### New Features

- [#&#8203;850]: Add `Attribute::as_bool()` method to get an attribute
value as a boolean.
- [#&#8203;850]: Add `Attributes::has_nil()` method to check if
attributes has `xsi:nil` attribute set to `true`.
- [#&#8203;497]: Handle `xsi:nil` attribute in serde Deserializer to
better process optional fields.

[#&#8203;497]: https://redirect.github.com/tafia/quick-xml/issues/497

[#&#8203;850]: https://redirect.github.com/tafia/quick-xml/pull/850

###
[`v0.37.2`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0372----2024-12-29)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.1...v0.37.2)

##### New Features

- [#&#8203;836]: Add `se::to_utf8_io_writer()` helper compatible with
`std::io::Write` and restricted to UTF-8 encoding.

[#&#8203;836]: https://redirect.github.com/tafia/quick-xml/pull/836

###
[`v0.37.1`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0371----2024-11-17)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.37.0...v0.37.1)

##### New Features

- [#&#8203;831]: Add `BytesCData::escaped()` fn to construct CDATA
events from arbitrary user input.

[#&#8203;831]: https://redirect.github.com/tafia/quick-xml/issues/831

###
[`v0.37.0`](https://redirect.github.com/tafia/quick-xml/blob/HEAD/Changelog.md#0370----2024-10-27)

[Compare
Source](https://redirect.github.com/tafia/quick-xml/compare/v0.36.2...v0.37.0)

##### New Features

- [#&#8203;826]: Implement `From<String>` and `From<Cow<str>>` for
`quick_xml::de::Text`.
- [#&#8203;826]: Make `SimpleTypeDeserializer` and
`SimpleTypeSerializer` public.
- [#&#8203;826]: Implement `IntoDeserializer` for `&mut Deserializer`.

##### Bug Fixes

- [#&#8203;655]: Do not write indent before and after `$text` fields and
those `$value` fields
  that are serialized as a text (for example, `usize` or `String`).
- [#&#8203;826]: Handle only those boolean representations that are
allowed by [Xml Schema]
which is only `"true"`, `"1"`, `"false"`, and `"0"`. Previously the
following values
  also was accepted:
| `bool` | XML content |
| ------- |
------------------------------------------------------------- |
| `true` | `"True"`, `"TRUE"`, `"t"`, `"Yes"`, `"YES"`, `"yes"`, `"y"` |
| `false` | `"False"`, `"FALSE"`, `"f"`, `"No"`, `"NO"`, `"no"`, `"n"` |

##### Misc Changes

- [#&#8203;227]: Split `SeError` from `DeError` in the `serialize`
feature.
  Serialize functions and methods now return `SeError`.
- [#&#8203;810]: Return `std::io::Error` from `Writer` methods.
- [#&#8203;811]: Split `NamespaceError` and `EncodingError` from
`Error`.
- [#&#8203;811]: Renamed `Error::EscapeError` to `Error::Escape` to
match other variants.
- [#&#8203;811]: Narrow down error return type from `Error` where only
one variant is ever returned:
attribute related methods on `BytesStart` and `BytesDecl` returns
`AttrError`
- [#&#8203;820]: Classify output of the `Serializer` by returning an
enumeration with kind of written data
- [#&#8203;823]: Do not allow serialization of consequent primitives,
for example `Vec<usize>` or
`Vec<String>` in `$value` fields. They cannot be deserialized back with
the same result
- [#&#8203;827]: Make `escape` and it variants take a `impl
Into<Cow<str>>` argument and implement
  `From<(&'a str, Cow<'a, str>)>` on `Attribute`
- [#&#8203;826]: Removed `DeError::InvalidInt`, `DeError::InvalidFloat`
and `DeError::InvalidBoolean`.
Now the responsibility for returning the error lies with the visitor of
the type.
See rationale in
[serde-rs/serde#2811](https://redirect.github.com/serde-rs/serde/pull/2811)

[#&#8203;227]: https://redirect.github.com/tafia/quick-xml/issues/227

[#&#8203;655]: https://redirect.github.com/tafia/quick-xml/issues/655

[#&#8203;810]: https://redirect.github.com/tafia/quick-xml/pull/810

[#&#8203;811]: https://redirect.github.com/tafia/quick-xml/pull/811

[#&#8203;820]: https://redirect.github.com/tafia/quick-xml/pull/820

[#&#8203;823]: https://redirect.github.com/tafia/quick-xml/pull/823

[#&#8203;826]: https://redirect.github.com/tafia/quick-xml/pull/826

[#&#8203;827]: https://redirect.github.com/tafia/quick-xml/pull/827

[Xml Schema]: https://www.w3.org/TR/xmlschema11-2/#boolean

</details>

<details>
<summary>seanmonstar/reqwest (reqwest)</summary>

###
[`v0.13.2`](https://redirect.github.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v0132)

[Compare
Source](https://redirect.github.com/seanmonstar/reqwest/compare/v0.13.1...v0.13.2)

- Fix HTTP/2 and native-tls ALPN feature combinations.
- Fix HTTP/3 to send h3 ALPN.
- (wasm) fix `RequestBuilder::json()` from override previously set
content-type.

###
[`v0.13.1`](https://redirect.github.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v0131)

[Compare
Source](https://redirect.github.com/seanmonstar/reqwest/compare/v0.13.0...v0.13.1)

- Fixes compiling with rustls on Android targets.

###
[`v0.13.0`](https://redirect.github.com/seanmonstar/reqwest/blob/HEAD/CHANGELOG.md#v0130)

[Compare
Source](https://redirect.github.com/seanmonstar/reqwest/compare/v0.12.28...v0.13.0)

- **Breaking changes**:
  - `rustls` is now the default TLS backend, instead of `native-tls`.
- `rustls` crypto provider defaults to aws-lc instead of *ring*.
(`rustls-no-provider` exists if you want a different crypto provider)
  - `rustls-tls` has been renamed to `rustls`.
- rustls roots features removed, `rustls-platform-verifier` is used by
default.
    - To use different roots, call `tls_certs_only(your_roots)`.
- `native-tls` now includes ALPN. To disable, use `native-tls-no-alpn`.
  - `query` and `form` are now crate features, disabled by default.
- Long-deprecated methods and crate features have been removed (such as
`trust-dns`, which was renamed `hickory-dns` a while ago).
- Many TLS-related methods renamed to improve autocompletion and
discovery, but previous name left in place with a "soft" deprecation.
(just documented, no warnings)
  - For example, prefer `tls_backend_rustls()` over `use_rustls_tls()`.

#### v0.12.28

- Fix compiling on Windows if TLS and SOCKS features are not enabled.

#### v0.12.27

- Add `ClientBuilder::windows_named_pipe(name)` option that will force
all requests over that Windows Named Piper.

#### v0.12.26

- Fix sending `Accept-Encoding` header only with values configured with
reqwest, regardless of underlying tower-http config.

#### v0.12.25

- Add `Error::is_upgrade()` to determine if the error was from an HTTP
upgrade.
- Fix sending `Proxy-Authorization` if only username is configured.
- Fix sending `Proxy-Authorization` to HTTPS proxies when the target is
HTTP.
- Refactor internal decompression handling to use tower-http.

#### v0.12.24

- Refactor cookie handling to an internal middleware.
- Refactor internal random generator.
- Refactor base64 encoding to reduce a copy.
- Documentation updates.

#### v0.12.23

- Add `ClientBuilder::unix_socket(path)` option that will force all
requests over that Unix Domain Socket.
- Add `ClientBuilder::retry(policy)` and `reqwest::retry::Builder` to
configure automatic retries.
- Add `ClientBuilder::dns_resolver2()` with more ergonomic argument
bounds, allowing more resolver implementations.
- Add `http3_*` options to `blocking::ClientBuilder`.
- Fix default TCP timeout values to enabled and faster.
- Fix SOCKS proxies to default to port 1080
- (wasm) Add cache methods to `RequestBuilder`.

#### v0.12.22

- Fix socks proxies when resolving IPv6 destinations.

#### v0.12.21

- Fix socks proxy to use `socks4a://` instead of `socks4h://`.
- Fix `Error::is_timeout()` to check for hyper and IO timeouts too.
- Fix request `Error` to again include URLs when possible.
- Fix socks connect error to include more context.
- (wasm) implement `Default` for `Body`.

#### v0.12.20

- Add `ClientBuilder::tcp_user_timeout(Duration)` option to set
`TCP_USER_TIMEOUT`.
- Fix proxy headers only using the first matched proxy.
- (wasm) Fix re-adding `Error::is_status()`.

#### v0.12.19

- Fix redirect that changes the method to GET should remove payload
headers.
- Fix redirect to only check the next scheme if the policy action is to
follow.
- (wasm) Fix compilation error if `cookies` feature is enabled (by the
way, it's a noop feature in wasm).

#### v0.12.18

- Fix compilation when `socks` enabled without TLS.

#### v0.12.17

- Fix compilation on macOS.

#### v0.12.16

- Add `ClientBuilder::http3_congestion_bbr()` to enable BBR congestion
control.
- Add `ClientBuilder::http3_send_grease()` to configure whether to send
use QUIC grease.
- Add `ClientBuilder::http3_max_field_section_size()` to configure the
maximum response headers.
- Add `ClientBuilder::tcp_keepalive_interval()` to configure TCP probe
interval.
- Add `ClientBuilder::tcp_keepalive_retries()` to configure TCP probe
count.
- Add `Proxy::headers()` to add extra headers that should be sent to a
proxy.
- Fix `redirect::Policy::limit()` which had an off-by-1 error, allowing
1 more redirect than specified.
- Fix HTTP/3 to support streaming request bodies.
- (wasm) Fix null bodies when calling `Response::bytes_stream()`.

#### v0.12.15

- Fix Windows to support both `ProxyOverride` and `NO_PROXY`.
- Fix http3 to support streaming response bodies.
- Fix http3 dependency from public API misuse.

#### v0.12.14

- Fix missing `fetch_mode_no_cors()`, marking as deprecated when not on
WASM.

#### v0.12.13

- Add `Form::into_reader()` for blocking `multipart` forms.
- Add `Form::into_stream()` for async `multipart` forms.
- Add support for SOCKS4a proxies.
- Fix decoding responses with multiple zstd frames.
- Fix `RequestBuilder::form()` from overwriting a previously set
`Content-Type` header, like the other builder methods.
- Fix cloning of request timeout in `blocking::Request`.
- Fix http3 synchronization of connection creation, reducing unneccesary
extra connections.
- Fix Windows system proxy to use `ProxyOverride` as a `NO_PROXY` value.
- Fix blocking read to correctly reserve and zero read buffer.
- (wasm) Add support for request timeouts.
- (wasm) Fix `Error::is_timeout()` to return true when from a request
timeout.

#### v0.12.12

- (wasm) Fix compilation by not compiler `tokio/time` on WASM.

#### v0.12.11

- Fix decompression returning an error when HTTP/2 ends with an empty
data frame.

#### v0.12.10

- Add `ClientBuilder::connector_layer()` to allow customizing the
connector stack.
- Add `ClientBuilder::http2_max_header_list_size()` option.
- Fix propagating body size hint (`content-length`) information when
wrapping bodies.
- Fix decompression of chunked bodies so the connections can be reused
more often.

#### v0.12.9

- Add `tls::CertificateRevocationLists` support.
- Add crate features to enable webpki roots without selecting a rustls
provider.
- Fix `connection_verbose()` to output read logs.
- Fix `multipart::Part::file()` to automatically include content-length.
- Fix proxy to internally no longer cache system proxy settings.

#### v0.12.8

- Add support for SOCKS4 proxies.
- Add `multipart::Form::file()` method for adding files easily.
- Add `Body::wrap()` to wrap any `http_body::Body` type.
- Fix the pool configuration to use a timer to remove expired
connections.

#### v0.12.7

- Revert adding `impl Service<http::Request<_>>` for `Client`.

#### v0.12.6

- Add support for `danger_accept_invalid_hostnames` for `rustls`.
- Add `impl Service<http::Request<Body>>` for `Client` and `&'_ Client`.
- Add support for `!Sync` bodies in `Body::wrap_stream()`.
- Enable happy eyeballs when `hickory-dns` is used.
- Fix `Proxy` so that `HTTP(S)_PROXY` values take precedence over
`ALL_PROXY`.
- Fix `blocking::RequestBuilder::header()` from unsetting `sensitive` on
passed header values.

#### v0.12.5

- Add `blocking::ClientBuilder::dns_resolver()` method to change DNS
resolver in blocking client.
- Add `http3` feature back, still requiring `reqwest_unstable`.
- Add `rustls-tls-no-provider` Cargo feature to use rustls without a
crypto provider.
- Fix `Accept-Encoding` header combinations.
- Fix http3 resolving IPv6 addresses.
- Internal: upgrade to rustls 0.23.

#### v0.12.4

- Add `zstd` support, enabled with `zstd` Cargo feature.
- Add `ClientBuilder::read_timeout(Duration)`, which applies the
duration for each read operation. The timeout resets after a successful
read.

#### v0.12.3

- Add `FromStr` for `dns::Name`.
- Add `ClientBuilder::built_in_webpki_certs(bool)` to enable them
separately.
- Add `ClientBuilder::built_in_native_certs(bool)` to enable them
separately.
- Fix sending `content-length: 0` for GET requests.
- Fix response body `content_length()` to return value when timeout is
configured.
- Fix `ClientBuilder::resolve()` to use lowercase domain names.

#### v0.12.2

- Fix missing ALPN when connecting to socks5 proxy with rustls.
- Fix TLS version limits with rustls.
- Fix not detected ALPN h2 from server with native-tls.

#### v0.12.1

- Fix `ClientBuilder::interface()` when no TLS is enabled.
- Fix `TlsInfo::peer_certificate()` being truncated with rustls.
- Fix panic if `http2` feature disabled but TLS negotiated h2 in ALPN.
- Fix `Display` for `Error` to not include its source error.

</details>

<details>
<summary>rust-scraper/scraper (scraper)</summary>

###
[`v0.26.0`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.26.0)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.25.0...v0.26.0)

#### What's Changed

- fix dom manipulation example by
[@&#8203;JayceFayne](https://redirect.github.com/JayceFayne) in
[#&#8203;292](https://redirect.github.com/rust-scraper/scraper/pull/292)
- Bump selectors from 0.33.0 to 0.35.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;298](https://redirect.github.com/rust-scraper/scraper/pull/298)
- Bump indexmap from 2.12.1 to 2.13.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;294](https://redirect.github.com/rust-scraper/scraper/pull/294)
- Upgrade ego-tree to 0.11.0 and html5ever to 0.37.1 by
[@&#8203;cfvescovo](https://redirect.github.com/cfvescovo) in
[#&#8203;300](https://redirect.github.com/rust-scraper/scraper/pull/300)
- Bump html5ever from 0.37.1 to 0.38.0 by
[@&#8203;mohe2015](https://redirect.github.com/mohe2015) in
[#&#8203;303](https://redirect.github.com/rust-scraper/scraper/pull/303)
- Bump selectors from 0.35.0 to 0.36.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;307](https://redirect.github.com/rust-scraper/scraper/pull/307)
- Bump html5ever from 0.38.0 to 0.39.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;308](https://redirect.github.com/rust-scraper/scraper/pull/308)
- Version 0.26.0 by
[@&#8203;adamreichold](https://redirect.github.com/adamreichold) in
[#&#8203;306](https://redirect.github.com/rust-scraper/scraper/pull/306)

#### New Contributors

- [@&#8203;JayceFayne](https://redirect.github.com/JayceFayne) made
their first contribution in
[#&#8203;292](https://redirect.github.com/rust-scraper/scraper/pull/292)

**Full Changelog**:
<rust-scraper/scraper@v0.25.0...v0.26.0>

###
[`v0.25.0`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.25.0)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.24.0...v0.25.0)

#### What's Changed

- chore(Cargo.toml): bump servo to 0.36.0 by
[@&#8203;Jan9103](https://redirect.github.com/Jan9103) in
[#&#8203;280](https://redirect.github.com/rust-scraper/scraper/pull/280)
- Add version flag in executable by
[@&#8203;kachick](https://redirect.github.com/kachick) in
[#&#8203;282](https://redirect.github.com/rust-scraper/scraper/pull/282)
- Avoid panic for unknown flags and invalid selectors when using
executable by [@&#8203;kachick](https://redirect.github.com/kachick) in
[#&#8203;283](https://redirect.github.com/rust-scraper/scraper/pull/283)
- Update repo URL by
[@&#8203;atouchet](https://redirect.github.com/atouchet) in
[#&#8203;286](https://redirect.github.com/rust-scraper/scraper/pull/286)
- Added cargo deny to test github action by
[@&#8203;haydonryan](https://redirect.github.com/haydonryan) in
[#&#8203;287](https://redirect.github.com/rust-scraper/scraper/pull/287)

#### New Contributors

- [@&#8203;Jan9103](https://redirect.github.com/Jan9103) made their
first contribution in
[#&#8203;280](https://redirect.github.com/rust-scraper/scraper/pull/280)
- [@&#8203;kachick](https://redirect.github.com/kachick) made their
first contribution in
[#&#8203;282](https://redirect.github.com/rust-scraper/scraper/pull/282)
- [@&#8203;atouchet](https://redirect.github.com/atouchet) made their
first contribution in
[#&#8203;286](https://redirect.github.com/rust-scraper/scraper/pull/286)
- [@&#8203;haydonryan](https://redirect.github.com/haydonryan) made
their first contribution in
[#&#8203;287](https://redirect.github.com/rust-scraper/scraper/pull/287)

**Full Changelog**:
<rust-scraper/scraper@v0.24.0...v0.25.0>

###
[`v0.24.0`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.24.0)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.23.1...v0.24.0)

#### What's Changed

- Bump depedencies, especially html5ever, cssparser, selectors which
must be bumped together. by
[@&#8203;adamreichold](https://redirect.github.com/adamreichold) in
[#&#8203;249](https://redirect.github.com/rust-scraper/scraper/pull/249)
- Bump `selectors` to v0.28 by
[@&#8203;paolobarbolini](https://redirect.github.com/paolobarbolini) in
[#&#8203;251](https://redirect.github.com/rust-scraper/scraper/pull/251)
- Bump getopts from 0.2.21 to 0.2.22 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;254](https://redirect.github.com/rust-scraper/scraper/pull/254)
- Recreate README.md as a non-symlink by
[@&#8203;saschanaz](https://redirect.github.com/saschanaz) in
[#&#8203;250](https://redirect.github.com/rust-scraper/scraper/pull/250)
- Bump selectors from 0.28.0 to 0.29.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;257](https://redirect.github.com/rust-scraper/scraper/pull/257)
- Bump html5ever and selectors dependencies by
[@&#8203;mina86](https://redirect.github.com/mina86) in
[#&#8203;263](https://redirect.github.com/rust-scraper/scraper/pull/263)
- Bump selectors from 0.30.0 to 0.31.0 by
[@&#8203;dependabot](https://redirect.github.com/dependabot)\[bot] in
[#&#8203;264](https://redirect.github.com/rust-scraper/scraper/pull/264)

#### New Contributors

- [@&#8203;saschanaz](https://redirect.github.com/saschanaz) made their
first contribution in
[#&#8203;250](https://redirect.github.com/rust-scraper/scraper/pull/250)
- [@&#8203;mina86](https://redirect.github.com/mina86) made their first
contribution in
[#&#8203;263](https://redirect.github.com/rust-scraper/scraper/pull/263)

**Full Changelog**:
<rust-scraper/scraper@v0.23.1...v0.24.0>

###
[`v0.23.1`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.23.1)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.23.0...v0.23.1)

**Full Changelog**:
<rust-scraper/scraper@v0.23.0...v0.23.1>

###
[`v0.23.0`](https://redirect.github.com/rust-scraper/scraper/releases/tag/v0.23.0)

[Compare
Source](https://redirect.github.com/rust-scraper/scraper/compare/v0.22.0...v0.23.0)

#### What's Changed

- Fix README symlink by [@&#8203;hwup](https://redirect.github.com/hwup)
in
[#&#8203;224](https://redirect.github.com/rust-scraper/scraper/pull/224)
- Make `HtmlTreeSink`'s field public by
[@&#8203;max-heller](https://redirect.github.com/max-heller) in
[#&#8203;226](https://redirect.github.com/rust-scraper/scraper/pull/226)
- Bump indexmap from 2.7.0 to 2.7.1 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;230](https://redirect.github.com/rust-scraper/scraper/pull/230)
- Add a serde feature for (de)serializing Selectors by
[@&#8203;jakubslaby09](https://redirect.github.com/jakubslaby09) in
[#&#8203;227](https://redirect.github.com/rust-scraper/scraper/pull/227)
- Bump serde from 1.0.215 to 1.0.217 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;233](https://redirect.github.com/rust-scraper/scraper/pull/233)
- Bump serde from 1.0.217 to 1.0.218 by
[@&#8203;dependabot](https://redirect.github.com/dependabot) in
[#&#8203;236](https://redirect.github.com/rust-scraper/scraper/pull/236)

#### New Contributors

- [@&#8203;hwup](https://redirect.github.com/hwup) made their first
contribution in
[#&#8203;224](https://redirect.github.com/rust-scraper/scraper/pull/224)
- [@&#8203;max-heller](https://redirect.github.com/max-heller) made
their first contribution in
[#&#8203;226](https://redirect.github.com/rust-scraper/scraper/pull/226)
- [@&#8203;jakubslaby09](https://redirect.github.com/jakubslaby09) made
their first contribution in
[#&#8203;227](https://redirect.github.com/rust-scraper/scraper/pull/227)

**Full Changelog**:
<rust-scraper/scraper@v0.22.0...v0.23.0>

</details>

<details>
<summary>snapview/tokio-tungstenite (tokio-tungstenite)</summary>

###
[`v0.29.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0290)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.28.0...v0.29.0)

- Update `tungstenite` to `0.29.0`. See [`tungstenite`
release](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md).

###
[`v0.28.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0280)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.27.0...v0.28.0)

- Update `tungstenite` to `0.18.0`. See [`tungstenite`
release](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md).

###
[`v0.27.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0270)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.26.2...v0.27.0)

- See [performance updates in
`tungstenite-rs`](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md#0270).

###
[`v0.26.2`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0262)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.26.1...v0.26.2)

- Update `tungstenite`, see [changes
here](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md#0262).

###
[`v0.26.1`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0261)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.26.0...v0.26.1)

- Update `tungstenite` to address an issue that might cause UB in
certain cases.

###
[`v0.26.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0260)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.25.0...v0.26.0)

- Update `tungstenite` to `0.26.0` ([breaking
changes](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md#0260)).

###
[`v0.25.0`](https://redirect.github.com/snapview/tokio-tungstenite/blob/HEAD/CHANGELOG.md#0250)

[Compare
Source](https://redirect.github.com/snapview/tokio-tungstenite/compare/v0.24.0...v0.25.0)

- Update `tungstenite` to `0.25.0` ([important
updates!](https://redirect.github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md#0250)).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - Between 12:00 AM and 03:59 AM ( * 0-3
* * * ) (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

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

---

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

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/processone/fluux-messenger).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDAuMCIsInVwZGF0ZWRJblZlciI6IjQzLjEwMC4wIiwidGFyZ2V0QnJhbmNoIjoiZGV2ZWwiLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants