Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add functionality for custom (de)compress instances #361

Merged
merged 4 commits into from
Jul 31, 2023

Conversation

PierreV23
Copy link
Contributor

Adding these functions make it easier to use custom Decompress and Compress instances. Sometimes these are needed to change the window_bits or zlib_header, without these functions its kinda painful to implement it.

added functions:

bufread

  • ZlibEncoder::new_with_compress
  • ZlibDecoder::new_with_decompress

read

  • ZlibEncoder::new_with_compress
  • ZlibDecoder::new_with_decompress
  • ZlibDecoder::new_with_decompress_and_buf

write

  • ZlibEncoder::new_with_compress
  • ZlibDecoder::new_with_decompress

@Byron Byron self-assigned this Jul 17, 2023
It attempts to avoid referring to other functions, and instead repeats
documentation from the function it is most similar to, with adjustments
to show its differences.
Copy link
Member

@Byron Byron left a comment

Choose a reason for hiding this comment

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

Thanks a lot for contributing!

I also see how these new methods would add to an overall more consistent API.
After making adjustments to the doc-strings I'd hope for another untainted pair of eyes for merging though.

@Byron Byron requested a review from JohnTitor July 17, 2023 06:11
@PierreV23
Copy link
Contributor Author

PierreV23 commented Jul 17, 2023

Thanks a lot for contributing!

I also see how these new methods would add to an overall more consistent API.
After making adjustments to the doc-strings I'd hope for another untainted pair of eyes for merging though.

Yea this is my first PR and attempt at making docs :/

Anyway something I should note. (De)Compress both have a function new_gzip, which feels kinda weird passing to a new_... function of Zlib(De)Encoder...

I dont know if passing such instance would break it, I haven't tested it.

@Byron
Copy link
Member

Byron commented Jul 17, 2023

Thanks for pointing this out!
Yes, maybe a word of caution in the docs might be appropriate. But then again, those who need full control probably know why they need it in the first place.

@Rigidity
Copy link

Currently it doesn't seem possible to set a custom dictionary unless you use the raw Compress/Decompress. But then you don't get access to the private zio module functionality. This PR would enable this

@Byron
Copy link
Member

Byron commented Jul 25, 2023

I have given it another review to improve internal consistency, and would think it's ready for merge.
Since the change involves a public API, I'd really love another review, let's see what I can do about that.

@Byron
Copy link
Member

Byron commented Jul 31, 2023

@jongiddy Maybe you have thoughts on this PR? I'd appreciate your opinion. Thanks for considering.

@jongiddy
Copy link
Contributor

I do not think we need new_with_decompress_and_buf. Anyone who needs to control the buffer size should create a BufReader and use bufread::ZlibDecoder directly.

I'm not sure that we need to control the zlib_header. This is an internal flag to allow sharing the implementations for Deflate and Zlib formats. I guess it helps a little if the caller has a similar boolean flag.

That only leaves window_bits. There might be a case for exposing the new_with_window_bits from the mem types, but this should be done consistently in deflate and zlib.

However, given that the mem Compress and Decompress are public already, doing it this way is OK. It provides control over window_bits and provides a way to pass the zlib_header flag directly. My only change would be to remove the new_with_decompress_and_buf method.

@Byron
Copy link
Member

Byron commented Jul 31, 2023

Thanks a lot, @jongiddy! I have removed the new_with_decompress_and_buf method as suggested.

This also brings us to the point where we can consider to at least deprecate all the existing new_with_buf() methods while documenting how these should be used instead - they seem redundant after all, but I can imagine how they have been added for convenience. Probably though, it's best to leave these be, while admitting that new_with_decompress is probably the 'expert mode' of constructors, which is used rarely and won't needed such buf related conveniences.

In any case, I think this PR can be merged now.

@Byron
Copy link
Member

Byron commented Jul 31, 2023

Oh, never mind, I think after breaking CI in the most sloppy of ways, it became clear why with_buf variants exist. new will always create a BufRead, and controlling the buffer is only possible by having a separate constructor.
It would be possible to let new_with_decompress() take r without wrapping it into BufRead, but that would be quite a departure form the way the API works.

So unless the API is changed to *not * wrap incoming Read impls into BufRead, I think the way it works now (without my change) is the way to go after all.

@Byron
Copy link
Member

Byron commented Jul 31, 2023

I am merging the previous state, but please let me know in case I am missing something so we can apply a fix in a follow-up.

@Byron Byron merged commit 5d462b3 into rust-lang:main Jul 31, 2023
@jongiddy
Copy link
Contributor

Not sure how removing a function that is not used by a test could break CI?

None of the with_buf methods should need to be used as long as the caller does both of:

  1. Wrap a non-BufRead reader in a BufReader; and
  2. Change from the read module to the bufread module for the compress and decompress types.

@Byron
Copy link
Member

Byron commented Aug 1, 2023

Oh, never mind, I think after breaking CI in the most sloppy of ways,

Not sure how removing a function that is not used by a test could break CI?

CI breakage was unrelated, or related to me being sloppy.

Related to with_buf(), I meant to say that any change to these would mean deprecating them, yet I thought they are probably there as convenience and thus for a good-enough reason.

However, since the …with_buf() moniker is now causing additional effort as it this PR had to add another method for symmetry, it might be worth rethinking them, while acknowledging that this will affect users in various ways which is why I shied back from a change in the first place.

If you feel it's worth pursuing such a change, I invite you to open a draft PR to sketch it out (which I'd always prefer over an issue which is more abstract).

@jongiddy
Copy link
Contributor

jongiddy commented Aug 1, 2023

While the with_buf methods are redundant, I have no desire to deprecate them. My suggestion was to not add the new read::ZlibDecoder::new_with_decompress_and_buf(r, d, vec![0; 1024]) method since the same behaviour can be achieved using bufread::ZlibDecoder::new_with_decompress(BufReader::with_buf(r, vec![0; 1024]), d).

My concern above was that removing this new function, that isn't used anywhere yet, broke CI. But it appears that was not the case.

@Byron
Copy link
Member

Byron commented Aug 1, 2023

While the with_buf methods are redundant, I have no desire to deprecate them. My suggestion was to not add the new read::ZlibDecoder::new_with_decompress_and_buf(r, d, vec![0; 1024]) method since the same behaviour can be achieved using bufread::ZlibDecoder::new_with_decompress(BufReader::with_buf(r, vec![0; 1024]), d).

I actually experimented with this which is why I realized it's for the better to keep this PR as is for a consistent API. Would the with_buf methods not exist, it would be clear that new_with_decompress_and_buf would also not exist and for the better. What I wanted to avoid is to have this one 'expert' method that requires the caller to add the BufRead which this implementations currently enforces, causing surprises in performance. This led me to believe that the authors of this type must have believed that having a BufRead is so paramount that there should be no way to even accidentally not have it.
I hope this makes sense.

@PierreV23 PierreV23 mentioned this pull request Aug 1, 2023
bors referenced this pull request in rust-lang/cargo Sep 1, 2023
chore(deps): update compatible

[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [anyhow](https://github.com/dtolnay/anyhow) | workspace.dependencies | patch | `1.0.72` -> `1.0.75` |
| [base64](https://github.com/marshallpierce/rust-base64) | workspace.dependencies | patch | `0.21.2` -> `0.21.3` |
| [bytesize](https://github.com/hyunsik/bytesize) | workspace.dependencies | minor | `1.2` -> `1.3` |
| [clap](https://github.com/clap-rs/clap) | workspace.dependencies | minor | `4.3.23` -> `4.4.2` |
| [filetime](https://github.com/alexcrichton/filetime) | workspace.dependencies | patch | `0.2.21` -> `0.2.22` |
| [flate2](https://github.com/rust-lang/flate2-rs) | workspace.dependencies | patch | `1.0.26` -> `1.0.27` |
| [memchr](https://github.com/BurntSushi/memchr) | workspace.dependencies | minor | `2.5.0` -> `2.6.2` |
| [openssl](https://github.com/sfackler/rust-openssl) | workspace.dependencies | patch | `0.10.55` -> `0.10.57` |
| [serde-untagged](https://github.com/dtolnay/serde-untagged) | workspace.dependencies | patch | `0.1.0` -> `0.1.1` |
| [serde_json](https://github.com/serde-rs/json) | workspace.dependencies | patch | `1.0.104` -> `1.0.105` |
| [snapbox](https://github.com/assert-rs/trycmd/tree/main/crates/snapbox) ([source](https://github.com/assert-rs/trycmd)) | workspace.dependencies | patch | `0.4.11` -> `0.4.12` |
| [syn](https://github.com/dtolnay/syn) | workspace.dependencies | patch | `2.0.28` -> `2.0.29` |
| [tar](https://github.com/alexcrichton/tar-rs) | workspace.dependencies | patch | `0.4.39` -> `0.4.40` |
| [tempfile](https://stebalien.com/projects/tempfile-rs/) ([source](https://github.com/Stebalien/tempfile)) | workspace.dependencies | minor | `3.7.0` -> `3.8.0` |
| [thiserror](https://github.com/dtolnay/thiserror) | workspace.dependencies | patch | `1.0.44` -> `1.0.47` |
| [unicase](https://github.com/seanmonstar/unicase) | workspace.dependencies | minor | `2.6.0` -> `2.7.0` |
| [url](https://github.com/servo/rust-url) | workspace.dependencies | patch | `2.4.0` -> `2.4.1` |

---

### Release Notes

<details>
<summary>dtolnay/anyhow (anyhow)</summary>

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

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

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

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

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

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

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

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

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

</details>

<details>
<summary>marshallpierce/rust-base64 (base64)</summary>

### [`v0.21.3`](https://github.com/marshallpierce/rust-base64/blob/HEAD/RELEASE-NOTES.md#0213)

[Compare Source](https://github.com/marshallpierce/rust-base64/compare/v0.21.2...v0.21.3)

-   Implement `source` instead of `cause` on Error types
-   Roll back MSRV to 1.48.0 so Debian can continue to live in a time warp
-   Slightly faster chunked encoding for short inputs
-   Decrease binary size

</details>

<details>
<summary>hyunsik/bytesize (bytesize)</summary>

### [`v1.3.0`](https://github.com/hyunsik/bytesize/releases/tag/v1.3.0): Release 1.3.0

[Compare Source](https://github.com/hyunsik/bytesize/compare/v1.2.0...v1.3.0)

#### Changes

-   Improved performance by eliminating String creation by utilizing the original \&str slice [#&#8203;31](https://github.com/hyunsik/bytesize/issues/31) ([`@&#8203;ChanTsune](https://github.com/ChanTsune))`

</details>

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

### [`v4.4.2`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#442---2023-08-31)

[Compare Source](https://github.com/clap-rs/clap/compare/v4.4.1...v4.4.2)

##### Performance

-   Improve build times by removing `once_cell` dependency

### [`v4.4.1`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#441---2023-08-28)

[Compare Source](https://github.com/clap-rs/clap/compare/v4.4.0...v4.4.1)

##### Features

-   Stabilize `Command::styles`

### [`v4.4.0`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#440---2023-08-24)

[Compare Source](https://github.com/clap-rs/clap/compare/v4.3.24...v4.4.0)

##### Compatibility

-   Update MSRV to 1.70.0

### [`v4.3.24`](https://github.com/clap-rs/clap/blob/HEAD/CHANGELOG.md#4324---2023-08-23)

[Compare Source](https://github.com/clap-rs/clap/compare/v4.3.23...v4.3.24)

##### Fixes

-   Ensure column padding is preserved in `--help` with custom templates

</details>

<details>
<summary>alexcrichton/filetime (filetime)</summary>

### [`v0.2.22`](https://github.com/alexcrichton/filetime/compare/0.2.21...0.2.22)

[Compare Source](https://github.com/alexcrichton/filetime/compare/0.2.21...0.2.22)

</details>

<details>
<summary>rust-lang/flate2-rs (flate2)</summary>

### [`v1.0.27`](https://github.com/rust-lang/flate2-rs/releases/tag/1.0.27)

[Compare Source](https://github.com/rust-lang/flate2-rs/compare/1.0.26...1.0.27)

#### What's Changed

-   Move GzHeader into GzState by [`@&#8203;jongiddy](https://github.com/jongiddy)` in [https://github.com/rust-lang/flate2-rs/pull/344](https://github.com/rust-lang/flate2-rs/pull/344)
-   Move blocked_partial_header_read test to read module by [`@&#8203;jongiddy](https://github.com/jongiddy)` in [https://github.com/rust-lang/flate2-rs/pull/345](https://github.com/rust-lang/flate2-rs/pull/345)
-   Move gzip header parsing out of bufread module by [`@&#8203;jongiddy](https://github.com/jongiddy)` in [https://github.com/rust-lang/flate2-rs/pull/346](https://github.com/rust-lang/flate2-rs/pull/346)
-   Fix a comment on the `Compression` struct by [`@&#8203;JohnTitor](https://github.com/JohnTitor)` in [https://github.com/rust-lang/flate2-rs/pull/351](https://github.com/rust-lang/flate2-rs/pull/351)
-   Add notes about multiple streams to `GzDecoder` by [`@&#8203;JohnTitor](https://github.com/JohnTitor)` in [https://github.com/rust-lang/flate2-rs/pull/347](https://github.com/rust-lang/flate2-rs/pull/347)
-   better error message when compiling with `--no-default-features` or `default-features = false` by [`@&#8203;Byron](https://github.com/Byron)` in [https://github.com/rust-lang/flate2-rs/pull/360](https://github.com/rust-lang/flate2-rs/pull/360)
-   Fix Read encoder examples by [`@&#8203;markgoddard](https://github.com/markgoddard)` in [https://github.com/rust-lang/flate2-rs/pull/356](https://github.com/rust-lang/flate2-rs/pull/356)
-   Add CIFuzz Github action by [`@&#8203;DavidKorczynski](https://github.com/DavidKorczynski)` in [https://github.com/rust-lang/flate2-rs/pull/326](https://github.com/rust-lang/flate2-rs/pull/326)
-   Fix GzDecoder Write partial filenames and comments by [`@&#8203;jongiddy](https://github.com/jongiddy)` in [https://github.com/rust-lang/flate2-rs/pull/323](https://github.com/rust-lang/flate2-rs/pull/323)
-   Fix header CRC calculation of trailing zeros by [`@&#8203;jongiddy](https://github.com/jongiddy)` in [https://github.com/rust-lang/flate2-rs/pull/363](https://github.com/rust-lang/flate2-rs/pull/363)
-   Fix broken link on README.md by [`@&#8203;wcampbell0x2a](https://github.com/wcampbell0x2a)` in [https://github.com/rust-lang/flate2-rs/pull/366](https://github.com/rust-lang/flate2-rs/pull/366)
-   Recommend MultiGzDecoder over GzDecoder in docs by [`@&#8203;jsha](https://github.com/jsha)` in [https://github.com/rust-lang/flate2-rs/pull/324](https://github.com/rust-lang/flate2-rs/pull/324)
-   Add functionality for custom (de)compress instances by [`@&#8203;PierreV23](https://github.com/PierreV23)` in [https://github.com/rust-lang/flate2-rs/pull/361](https://github.com/rust-lang/flate2-rs/pull/361)
-   Add maintenance document by [`@&#8203;Byron](https://github.com/Byron)` in [https://github.com/rust-lang/flate2-rs/pull/362](https://github.com/rust-lang/flate2-rs/pull/362)
-   Document that `read::GzDecoder` consumes bytes after end of gzip by [`@&#8203;jongiddy](https://github.com/jongiddy)` in [https://github.com/rust-lang/flate2-rs/pull/367](https://github.com/rust-lang/flate2-rs/pull/367)
-   prepare 1.0.27 release by [`@&#8203;Byron](https://github.com/Byron)` in [https://github.com/rust-lang/flate2-rs/pull/369](https://github.com/rust-lang/flate2-rs/pull/369)

#### New Contributors

-   [`@&#8203;Byron](https://github.com/Byron)` made their first contribution in [https://github.com/rust-lang/flate2-rs/pull/360](https://github.com/rust-lang/flate2-rs/pull/360)
-   [`@&#8203;markgoddard](https://github.com/markgoddard)` made their first contribution in [https://github.com/rust-lang/flate2-rs/pull/356](https://github.com/rust-lang/flate2-rs/pull/356)
-   [`@&#8203;jsha](https://github.com/jsha)` made their first contribution in [https://github.com/rust-lang/flate2-rs/pull/324](https://github.com/rust-lang/flate2-rs/pull/324)
-   [`@&#8203;PierreV23](https://github.com/PierreV23)` made their first contribution in [https://github.com/rust-lang/flate2-rs/pull/361](https://github.com/rust-lang/flate2-rs/pull/361)

**Full Changelog**: rust-lang/flate2-rs@1.0.26...1.0.27

</details>

<details>
<summary>BurntSushi/memchr (memchr)</summary>

### [`v2.6.2`](https://github.com/BurntSushi/memchr/compare/2.6.1...2.6.2)

[Compare Source](https://github.com/BurntSushi/memchr/compare/2.6.1...2.6.2)

### [`v2.6.1`](https://github.com/BurntSushi/memchr/compare/2.6.0...2.6.1)

[Compare Source](https://github.com/BurntSushi/memchr/compare/2.6.0...2.6.1)

### [`v2.6.0`](https://github.com/BurntSushi/memchr/compare/2.5.0...2.6.0)

[Compare Source](https://github.com/BurntSushi/memchr/compare/2.5.0...2.6.0)

</details>

<details>
<summary>sfackler/rust-openssl (openssl)</summary>

### [`v0.10.57`](https://github.com/sfackler/rust-openssl/releases/tag/openssl-v0.10.57)

[Compare Source](https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.56...openssl-v0.10.57)

#### What's Changed

-   Expose chacha20\_poly1305 on LibreSSL by [`@&#8203;alex](https://github.com/alex)` in [https://github.com/sfackler/rust-openssl/pull/2011](https://github.com/sfackler/rust-openssl/pull/2011)
-   Add openssl::cipher_ctx::CipherCtx::clone by [`@&#8203;johntyner](https://github.com/johntyner)` in [https://github.com/sfackler/rust-openssl/pull/2017](https://github.com/sfackler/rust-openssl/pull/2017)
-   Add X509VerifyParam::set_email by [`@&#8203;dhouck](https://github.com/dhouck)` in [https://github.com/sfackler/rust-openssl/pull/2018](https://github.com/sfackler/rust-openssl/pull/2018)
-   Add perl-FindBin dep for fedora by [`@&#8203;JadedBlueEyes](https://github.com/JadedBlueEyes)` in [https://github.com/sfackler/rust-openssl/pull/2023](https://github.com/sfackler/rust-openssl/pull/2023)
-   Update to bitflags 2.2.1. by [`@&#8203;qwandor](https://github.com/qwandor)` in [https://github.com/sfackler/rust-openssl/pull/1906](https://github.com/sfackler/rust-openssl/pull/1906)
-   Release openssl v0.10.57 and openssl-sys v0.9.92 by [`@&#8203;alex](https://github.com/alex)` in [https://github.com/sfackler/rust-openssl/pull/2025](https://github.com/sfackler/rust-openssl/pull/2025)

#### New Contributors

-   [`@&#8203;johntyner](https://github.com/johntyner)` made their first contribution in [https://github.com/sfackler/rust-openssl/pull/2017](https://github.com/sfackler/rust-openssl/pull/2017)
-   [`@&#8203;dhouck](https://github.com/dhouck)` made their first contribution in [https://github.com/sfackler/rust-openssl/pull/2018](https://github.com/sfackler/rust-openssl/pull/2018)
-   [`@&#8203;JadedBlueEyes](https://github.com/JadedBlueEyes)` made their first contribution in [https://github.com/sfackler/rust-openssl/pull/2023](https://github.com/sfackler/rust-openssl/pull/2023)
-   [`@&#8203;qwandor](https://github.com/qwandor)` made their first contribution in [https://github.com/sfackler/rust-openssl/pull/1906](https://github.com/sfackler/rust-openssl/pull/1906)

**Full Changelog**: sfackler/rust-openssl@openssl-v0.10.56...openssl-v0.10.57

### [`v0.10.56`](https://github.com/sfackler/rust-openssl/releases/tag/openssl-v0.10.56): openssl v0.10.56

[Compare Source](https://github.com/sfackler/rust-openssl/compare/openssl-v0.10.55...openssl-v0.10.56)

</details>

<details>
<summary>dtolnay/serde-untagged (serde-untagged)</summary>

### [`v0.1.1`](https://github.com/dtolnay/serde-untagged/compare/0.1.0...0.1.1)

[Compare Source](https://github.com/dtolnay/serde-untagged/compare/0.1.0...0.1.1)

</details>

<details>
<summary>serde-rs/json (serde_json)</summary>

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

[Compare Source](https://github.com/serde-rs/json/compare/v1.0.104...v1.0.105)

-   Support bool in map keys ([#&#8203;1054](https://github.com/serde-rs/json/issues/1054))

</details>

<details>
<summary>assert-rs/trycmd (snapbox)</summary>

### [`v0.4.12`](https://github.com/assert-rs/trycmd/compare/snapbox-v0.4.11...snapbox-v0.4.12)

[Compare Source](https://github.com/assert-rs/trycmd/compare/snapbox-v0.4.11...snapbox-v0.4.12)

</details>

<details>
<summary>dtolnay/syn (syn)</summary>

### [`v2.0.29`](https://github.com/dtolnay/syn/releases/tag/2.0.29)

[Compare Source](https://github.com/dtolnay/syn/compare/2.0.28...2.0.29)

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

</details>

<details>
<summary>alexcrichton/tar-rs (tar)</summary>

### [`v0.4.40`](https://github.com/alexcrichton/tar-rs/compare/0.4.39...0.4.40)

[Compare Source](https://github.com/alexcrichton/tar-rs/compare/0.4.39...0.4.40)

</details>

<details>
<summary>Stebalien/tempfile (tempfile)</summary>

### [`v3.8.0`](https://github.com/Stebalien/tempfile/blob/HEAD/CHANGELOG.md#380)

[Compare Source](https://github.com/Stebalien/tempfile/compare/v3.7.1...v3.8.0)

-   Added `with_prefix` and `with_prefix_in` to `TempDir` and `NamedTempFile` to make it easier to create temporary files/directories with nice prefixes.
-   Misc cleanups.

### [`v3.7.1`](https://github.com/Stebalien/tempfile/blob/HEAD/CHANGELOG.md#371)

[Compare Source](https://github.com/Stebalien/tempfile/compare/v3.7.0...v3.7.1)

-   Tempfile builds on haiku again.
-   Under the hood, we've switched from the unlinkat/linkat syscalls to the regular unlink/link syscalls where possible.

</details>

<details>
<summary>dtolnay/thiserror (thiserror)</summary>

### [`v1.0.47`](https://github.com/dtolnay/thiserror/releases/tag/1.0.47)

[Compare Source](https://github.com/dtolnay/thiserror/compare/1.0.46...1.0.47)

-   Work around rust-analyzer bug ([https://github.com/rust-lang/rust-analyzer/issues/9911](https://github.com/rust-lang/rust-analyzer/issues/9911))

### [`v1.0.46`](https://github.com/dtolnay/thiserror/releases/tag/1.0.46)

[Compare Source](https://github.com/dtolnay/thiserror/compare/1.0.45...1.0.46)

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

### [`v1.0.45`](https://github.com/dtolnay/thiserror/releases/tag/1.0.45)

[Compare Source](https://github.com/dtolnay/thiserror/compare/1.0.44...1.0.45)

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

</details>

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

### [`v2.7.0`](https://github.com/seanmonstar/unicase/releases/tag/v2.7.0)

[Compare Source](https://github.com/seanmonstar/unicase/compare/v2.6.0...v2.7.0)

#### What's Changed

-   Update to Unicode 15.0.0 by [`@&#8203;seanmonstar](https://github.com/seanmonstar)` in [https://github.com/seanmonstar/unicase/pull/59](https://github.com/seanmonstar/unicase/pull/59)

</details>

<details>
<summary>servo/rust-url (url)</summary>

### [`v2.4.1`](https://github.com/servo/rust-url/releases/tag/v2.4.1)

[Compare Source](https://github.com/servo/rust-url/compare/v2.4.0...v2.4.1)

##### What's Changed

-   Move debugger_visualizer tests to separate crate by [`@&#8203;lucacasonato](https://github.com/lucacasonato)` in [https://github.com/servo/rust-url/pull/853](https://github.com/servo/rust-url/pull/853)
-   Remove obsolete badge references by [`@&#8203;atouchet](https://github.com/atouchet)` in [https://github.com/servo/rust-url/pull/852](https://github.com/servo/rust-url/pull/852)
-   Fix trailing spaces in scheme / pathname / search setters by [`@&#8203;lucacasonato](https://github.com/lucacasonato)` in [https://github.com/servo/rust-url/pull/848](https://github.com/servo/rust-url/pull/848)
-   fix: implement std::error::Error for data-url by [`@&#8203;lucacasonato](https://github.com/lucacasonato)` in [https://github.com/servo/rust-url/pull/698](https://github.com/servo/rust-url/pull/698)
-   Enable the GitHub merge queue by [`@&#8203;mrobinson](https://github.com/mrobinson)` in [https://github.com/servo/rust-url/pull/851](https://github.com/servo/rust-url/pull/851)
-   Rewrite WPT runner by [`@&#8203;lucacasonato](https://github.com/lucacasonato)` in [https://github.com/servo/rust-url/pull/857](https://github.com/servo/rust-url/pull/857)
-   Implement std::error::Error for InvalidBase64 by [`@&#8203;lucacasonato](https://github.com/lucacasonato)` in [https://github.com/servo/rust-url/pull/856](https://github.com/servo/rust-url/pull/856)
-   Add `--generate-link-to-definition` option when building on docs.rs by [`@&#8203;GuillaumeGomez](https://github.com/GuillaumeGomez)` in [https://github.com/servo/rust-url/pull/858](https://github.com/servo/rust-url/pull/858)
-   Stabilize debugger_visualizer feature by [`@&#8203;lucacasonato](https://github.com/lucacasonato)` in [https://github.com/servo/rust-url/pull/855](https://github.com/servo/rust-url/pull/855)
-   Update WPT data and expectations by [`@&#8203;lucacasonato](https://github.com/lucacasonato)` in [https://github.com/servo/rust-url/pull/859](https://github.com/servo/rust-url/pull/859)
-   Fix no_std Support for idna by [`@&#8203;domenukk](https://github.com/domenukk)` in [https://github.com/servo/rust-url/pull/843](https://github.com/servo/rust-url/pull/843)
-   Fix panic in set_path for file URLs  by [`@&#8203;valenting](https://github.com/valenting)` in [https://github.com/servo/rust-url/pull/865](https://github.com/servo/rust-url/pull/865)

##### New Contributors

-   [`@&#8203;mrobinson](https://github.com/mrobinson)` made their first contribution in [https://github.com/servo/rust-url/pull/851](https://github.com/servo/rust-url/pull/851)
-   [`@&#8203;GuillaumeGomez](https://github.com/GuillaumeGomez)` made their first contribution in [https://github.com/servo/rust-url/pull/858](https://github.com/servo/rust-url/pull/858)
-   [`@&#8203;domenukk](https://github.com/domenukk)` made their first contribution in [https://github.com/servo/rust-url/pull/843](https://github.com/servo/rust-url/pull/843)

**Full Changelog**: servo/rust-url@v2.4.0...v2.4.1

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 5am on the first day of the month" (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://github.com/renovatebot/renovate/discussions) if that's undesired.

---

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

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/rust-lang/cargo).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi42OC4xIiwidXBkYXRlZEluVmVyIjoiMzYuNjguMSIsInRhcmdldEJyYW5jaCI6Im1hc3RlciJ9-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants