Skip to content

Commit

Permalink
More TransparentWrapper impls (core::cmp::Reverse and `core::num:…
Browse files Browse the repository at this point in the history
…:Saturating`) (#269)

* impl<T> TransparentWrapper<T> for core::cmp::Reverse<T>

* impl<T> TransparentWrapper<T> for core::num::Saturating<T>, with a new feature for non-base-MSRV stdlib TransparentWrapper impls.

* Restrict TransparentWrapper<T> for Reverse<T> to cfg(feature = "transparentwrapper_extra").

* nightly_docs for transparent_wrapper_extra

---------

Co-authored-by: Lokathor <[email protected]>
  • Loading branch information
zachs18 and Lokathor authored Oct 31, 2024
1 parent 79a15d0 commit af8d110
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ aarch64_simd = [] # MSRV 1.59.0: support aarch64 simd types

must_cast = [] # MSRV 1.64.0: support the `must` module.

# Adds `TransparentWrapper` impls for stdlib types newer than bytemuck's base MSRV.
# Current MSRV 1.74.0: `core::num::Saturating`.
# MSRV may increase if impls are added for newer types.
transparentwrapper_extra = []

const_zeroed = [] # MSRV 1.75.0: support const `zeroed()`

# Do not use if you can avoid it, because this is **unsound**!!!!
Expand Down
17 changes: 17 additions & 0 deletions src/transparent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -303,3 +303,20 @@ pub unsafe trait TransparentWrapper<Inner: ?Sized> {
}

unsafe impl<T> TransparentWrapper<T> for core::num::Wrapping<T> {}
#[cfg(feature = "transparentwrapper_extra")]
#[cfg_attr(
feature = "nightly_docs",
doc(cfg(feature = "transparentwrapper_extra"))
)]
unsafe impl<T> TransparentWrapper<T> for core::num::Saturating<T> {}

// Note that `Reverse` existed since Rust 1.19.0, but was only made `#[repr(transparent)]`
// in Rust 1.52.0 (PR: https://github.com/rust-lang/rust/pull/81879), so we have it under
// the same feature as `Saturating`, which was stabilized in Rust 1.74.0, so that this
// impl cannot be used on a version before 1.52.0 where it would be unsound.
#[cfg(feature = "transparentwrapper_extra")]
#[cfg_attr(
feature = "nightly_docs",
doc(cfg(feature = "transparentwrapper_extra"))
)]
unsafe impl<T> TransparentWrapper<T> for core::cmp::Reverse<T> {}

0 comments on commit af8d110

Please sign in to comment.