rust-bitcoin-unsafe-fast/bitcoin/src
merge-script f7b1810b15
Merge rust-bitcoin/rust-bitcoin#4182: Replace uses of `chunks_exact` with `as_chunks`
a013700527 Replace uses of `chunks_exact` with `as_chunks` (Martin Habovstiak)

Pull request description:

  This is now ready for review.

  In the past we've been using `chunks_exact` because const generics were unstable but then, when they were stabilized we didn't use `as_chunks` (or `array_chunks`) since they were unstable. But the instability was only because Rust devs don't know how to handle `0` being passed in. The function is perfectly implementable on stable. (With a tiny, easy-to-understand `unsafe` block.) `core` doesn't want to make a decision for all other crates yet but we can make it for our own crates because we know that we simply never pass zero. (And even if we did, we could just change the decision.)

  It also turns out there's a hack to simulate `const {}` block in our MSRV, so we can make compilation fail early.

  This commit adds an extension trait to internals to provide the methods, so we no longer have to use `chunks_exact`. It also cleans up the code quite nicely.

  Previous unresolved question, leaving for reference:

  > One issue with this change is that the names collide which could lead to hard error in future Rust versions. How do we solve it?
  > * ignore and just backport the fix once that actually happens
  > * rename the methods to something reasonable (e.g. `as_array_chunks`) - this risks that they'll rename the methods to the same thing by accident and it'll break anyway
  > * rename the methods to something silly (`bitcoin_as_chunks`) - yeah, the risk above is not there but then we have silly-looking code.

  We've decide to just rename the methods to something that won't possibly collide.

ACKs for top commit:
  tcharding:
    ACK a013700527
  apoelstra:
    ACK a01370052715b6733f07011f28944105493bda63; successfully ran local tests; nice!

Tree-SHA512: cc3359518f97e510da5ee9a33495e26c338bfc3e4162aaffcc72ed9c7daad0daf5e9ca3d23bce50877b0d3881792e98e28d21174a4426bb01281f12285ce08d1
2025-03-08 03:58:10 +00:00
..
address 2025-03-02 automated rustfmt nightly 2025-03-02 01:22:29 +00:00
blockdata Merge rust-bitcoin/rust-bitcoin#4197: Take `spent` closure by value in `count_witness_sigops` 2025-03-08 01:25:53 +00:00
consensus hashes: Add hash function to modules 2025-03-06 11:47:29 +11:00
crypto Deprecate `PrivateKey::from_slice` method 2025-03-04 21:01:34 +01:00
merkle_tree 2025-01-12 automated rustfmt nightly 2025-01-12 01:23:13 +00:00
network Update CompactTarget::from_next_work_required to take timespan as i64 2024-11-27 11:27:22 -06:00
p2p Update message.rs 2025-02-28 12:35:17 +01:00
psbt Merge rust-bitcoin/rust-bitcoin#4085: Remove the `GeneralHash` trait 2025-03-07 16:35:09 +00:00
taproot Replace uses of `chunks_exact` with `as_chunks` 2025-03-06 19:02:08 +01:00
bip32.rs Bound HmacEngine on HashEngine 2025-03-06 11:47:26 +11:00
bip152.rs Add Timestamp newtype 2025-02-25 10:03:28 +11:00
bip158.rs 2025-01-12 automated rustfmt nightly 2025-01-12 01:23:13 +00:00
consensus_validation.rs Stop using FQP on Amount type 2025-01-24 08:54:24 +11:00
hash_types.rs bitcoin: Remove hash type re-exports 2025-03-04 08:15:04 +11:00
internal_macros.rs Set avoid-breaking-exported-api to false 2024-12-11 10:11:50 +11:00
lib.rs Merge rust-bitcoin/rust-bitcoin#4126: Add additional re-exports 2025-03-06 23:13:42 +00:00
policy.rs Policy: Relax MIN_STANDARD_TX_NONWITNESS_SIZE to 65 2025-02-27 00:20:08 +07:00
pow.rs Add Timestamp newtype 2025-02-25 10:03:28 +11:00
serde_utils.rs Elide more lifetimes 2024-10-28 15:22:13 +11:00
sign_message.rs update secp256k1 to 0.30.0 2025-03-02 23:31:48 +08:00