Skip to content

Commit 7abdbc9

Browse files
committed
Add impl bytemuck::TransparentWrapper for OrderedFloat.
This gives a more strongly-typed way for users to take advantage of `OrderedFloat`’s representation.
1 parent 4b07101 commit 7abdbc9

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

src/lib.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ fn canonicalize_signed_zero<T: FloatCore>(x: T) -> T {
7878
///
7979
/// # Representation
8080
///
81-
/// `OrderedFloat` has `#[repr(transparent)]` and permits any value, so it is sound to use
81+
/// `OrderedFloat` has `#[repr(transparent)]` and permits any value, so it is sound to use
8282
/// [transmute](core::mem::transmute) or pointer casts to convert between any type `T` and
8383
/// `OrderedFloat<T>`.
8484
/// However, consider using [`bytemuck`] as a safe alternative if possible.
@@ -2754,7 +2754,7 @@ mod impl_arbitrary {
27542754
#[cfg(feature = "bytemuck")]
27552755
mod impl_bytemuck {
27562756
use super::{FloatCore, NotNan, OrderedFloat};
2757-
use bytemuck::{AnyBitPattern, CheckedBitPattern, NoUninit, Pod, Zeroable};
2757+
use bytemuck::{AnyBitPattern, CheckedBitPattern, NoUninit, Pod, TransparentWrapper, Zeroable};
27582758

27592759
unsafe impl<T: Zeroable> Zeroable for OrderedFloat<T> {}
27602760

@@ -2776,6 +2776,10 @@ mod impl_bytemuck {
27762776
}
27772777
}
27782778

2779+
// OrderedFloat allows any value of the contained type, so it is a TransparentWrapper.
2780+
// NotNan does not, so it is not.
2781+
unsafe impl<T> TransparentWrapper<T> for OrderedFloat<T> {}
2782+
27792783
#[test]
27802784
fn test_not_nan_bit_pattern() {
27812785
use bytemuck::checked::{try_cast, CheckedCastError};

0 commit comments

Comments
 (0)