From 59ba91bd59c7a96b8cf9b0b9312748f5aa20c813 Mon Sep 17 00:00:00 2001 From: Erik Hedvall Date: Wed, 31 Jul 2024 12:59:34 +0200 Subject: [PATCH] Make a few `palette::cast::*` functions `const fn` --- palette/src/cast/array.rs | 54 +++++++++++++-------------------------- palette/src/cast/uint.rs | 24 ++++++++--------- 2 files changed, 30 insertions(+), 48 deletions(-) diff --git a/palette/src/cast/array.rs b/palette/src/cast/array.rs index 25c9e9f2d..7e64ef49b 100644 --- a/palette/src/cast/array.rs +++ b/palette/src/cast/array.rs @@ -238,15 +238,12 @@ where /// let array3 = <&[_; 3]>::from(&color); /// ``` #[inline] -pub fn into_array_ref(value: &T) -> &T::Array +pub const fn into_array_ref(value: &T) -> &T::Array where T: ArrayCast, { - assert_eq!(core::mem::size_of::(), core::mem::size_of::()); - assert_eq!( - core::mem::align_of::(), - core::mem::align_of::() - ); + assert!(core::mem::size_of::() == core::mem::size_of::()); + assert!(core::mem::align_of::() == core::mem::align_of::()); let value: *const T = value; @@ -282,15 +279,12 @@ where /// let color3 = <&Srgb>::from(&array); /// ``` #[inline] -pub fn from_array_ref(value: &T::Array) -> &T +pub const fn from_array_ref(value: &T::Array) -> &T where T: ArrayCast, { - assert_eq!(core::mem::size_of::(), core::mem::size_of::()); - assert_eq!( - core::mem::align_of::(), - core::mem::align_of::() - ); + assert!(core::mem::size_of::() == core::mem::size_of::()); + assert!(core::mem::align_of::() == core::mem::align_of::()); let value: *const T::Array = value; @@ -598,15 +592,12 @@ where /// assert_eq!(cast::into_array_slice(colors), &[[64, 139, 10], [93, 18, 214]]) /// ``` #[inline] -pub fn into_array_slice(values: &[T]) -> &[T::Array] +pub const fn into_array_slice(values: &[T]) -> &[T::Array] where T: ArrayCast, { - assert_eq!(core::mem::size_of::(), core::mem::size_of::()); - assert_eq!( - core::mem::align_of::(), - core::mem::align_of::() - ); + assert!(core::mem::size_of::() == core::mem::size_of::()); + assert!(core::mem::align_of::() == core::mem::align_of::()); // Safety: The requirements of implementing `ArrayCast`, as well as the size // and alignment asserts, ensures that reading `T` as `T::Array` is safe. @@ -623,15 +614,12 @@ where /// assert_eq!(cast::into_component_slice(colors), &[64, 139, 10, 93, 18, 214]) /// ``` #[inline] -pub fn into_component_slice(values: &[T]) -> &[::Item] +pub const fn into_component_slice(values: &[T]) -> &[::Item] where T: ArrayCast, { - assert_eq!(core::mem::size_of::(), core::mem::size_of::()); - assert_eq!( - core::mem::align_of::(), - core::mem::align_of::() - ); + assert!(core::mem::size_of::() == core::mem::size_of::()); + assert!(core::mem::align_of::() == core::mem::align_of::()); let length = values.len() * T::Array::LENGTH; @@ -658,15 +646,12 @@ where /// ) /// ``` #[inline] -pub fn from_array_slice(values: &[T::Array]) -> &[T] +pub const fn from_array_slice(values: &[T::Array]) -> &[T] where T: ArrayCast, { - assert_eq!(core::mem::size_of::(), core::mem::size_of::()); - assert_eq!( - core::mem::align_of::(), - core::mem::align_of::() - ); + assert!(core::mem::size_of::() == core::mem::size_of::()); + assert!(core::mem::align_of::() == core::mem::align_of::()); // Safety: The requirements of implementing `ArrayCast`, as well as the size // and alignment asserts, ensures that reading `T::Array` as `T` is safe. @@ -737,17 +722,14 @@ where /// assert!(cast::try_from_component_slice::>(components).is_err()); /// ``` #[inline] -pub fn try_from_component_slice( +pub const fn try_from_component_slice( values: &[::Item], ) -> Result<&[T], SliceCastError> where T: ArrayCast, { - assert_eq!(core::mem::size_of::(), core::mem::size_of::()); - assert_eq!( - core::mem::align_of::(), - core::mem::align_of::() - ); + assert!(core::mem::size_of::() == core::mem::size_of::()); + assert!(core::mem::align_of::() == core::mem::align_of::()); if values.len() % T::Array::LENGTH != 0 { return Err(SliceCastError); diff --git a/palette/src/cast/uint.rs b/palette/src/cast/uint.rs index fc2ff022f..4868997f7 100644 --- a/palette/src/cast/uint.rs +++ b/palette/src/cast/uint.rs @@ -110,12 +110,12 @@ where /// assert_eq!(cast::into_uint_ref(&color), &0xFF17C64C); /// ``` #[inline] -pub fn into_uint_ref(value: &T) -> &T::Uint +pub const fn into_uint_ref(value: &T) -> &T::Uint where T: UintCast, { - assert_eq!(core::mem::size_of::(), core::mem::size_of::()); - assert_eq!(core::mem::align_of::(), core::mem::align_of::()); + assert!(core::mem::size_of::() == core::mem::size_of::()); + assert!(core::mem::align_of::() == core::mem::align_of::()); let value: *const T = value; @@ -133,12 +133,12 @@ where /// assert_eq!(cast::from_uint_ref::(&0xFF17C64C), &color); /// ``` #[inline] -pub fn from_uint_ref(value: &T::Uint) -> &T +pub const fn from_uint_ref(value: &T::Uint) -> &T where T: UintCast, { - assert_eq!(core::mem::size_of::(), core::mem::size_of::()); - assert_eq!(core::mem::align_of::(), core::mem::align_of::()); + assert!(core::mem::size_of::() == core::mem::size_of::()); + assert!(core::mem::align_of::() == core::mem::align_of::()); let value: *const T::Uint = value; @@ -255,12 +255,12 @@ where /// assert_eq!(cast::into_uint_slice(colors), &[0xFF17C64C, 0xFF5D12D6]) /// ``` #[inline] -pub fn into_uint_slice(values: &[T]) -> &[T::Uint] +pub const fn into_uint_slice(values: &[T]) -> &[T::Uint] where T: UintCast, { - assert_eq!(core::mem::size_of::(), core::mem::size_of::()); - assert_eq!(core::mem::align_of::(), core::mem::align_of::()); + assert!(core::mem::size_of::() == core::mem::size_of::()); + assert!(core::mem::align_of::() == core::mem::align_of::()); // Safety: The requirements of implementing `UintCast`, as well as the size // and alignment asserts, ensures that reading `T` as `T::Uint` is safe. @@ -280,12 +280,12 @@ where /// assert_eq!(cast::from_uint_slice::(&[0xFF17C64C, 0xFF5D12D6]), colors) /// ``` #[inline] -pub fn from_uint_slice(values: &[T::Uint]) -> &[T] +pub const fn from_uint_slice(values: &[T::Uint]) -> &[T] where T: UintCast, { - assert_eq!(core::mem::size_of::(), core::mem::size_of::()); - assert_eq!(core::mem::align_of::(), core::mem::align_of::()); + assert!(core::mem::size_of::() == core::mem::size_of::()); + assert!(core::mem::align_of::() == core::mem::align_of::()); // Safety: The requirements of implementing `UintCast`, as well as the size // and alignment asserts, ensures that reading `T::Uint` as `T` is safe.