Raw-rs: Remove fortuples dependency (#2082)

Remove fortuples from Raw-rs
This commit is contained in:
Elbert Ronnie
2024-10-28 16:23:22 +00:00
committed by GitHub
parent 4df780391c
commit b7ba2c3637
3 changed files with 55 additions and 62 deletions
+42 -25
View File
@@ -1,5 +1,4 @@
use crate::CHANNELS_IN_RGB;
use fortuples::fortuples;
#[derive(Clone, Copy)]
pub struct RawPixel {
@@ -25,21 +24,30 @@ impl<T: Fn(RawPixel) -> u16> RawPixelTransform for T {
}
}
fortuples! {
#[tuples::min_size(1)]
#[tuples::max_size(8)]
impl RawPixelTransform for #Tuple
where
#(#Member: RawPixelTransform),*
{
fn apply(&mut self, mut pixel: RawPixel) -> u16 {
#(pixel.value = #self.apply(pixel);)*
macro_rules! impl_raw_pixel_transform {
($($idx:tt $t:tt),+) => {
impl<$($t,)+> RawPixelTransform for ($($t,)+)
where
$($t: RawPixelTransform,)+
{
fn apply(&mut self, mut pixel: RawPixel) -> u16 {
$(pixel.value = self.$idx.apply(pixel);)*
pixel.value
}
}
pixel.value
}
}
};
}
impl_raw_pixel_transform!(0 A);
impl_raw_pixel_transform!(0 A, 1 B);
impl_raw_pixel_transform!(0 A, 1 B, 2 C);
impl_raw_pixel_transform!(0 A, 1 B, 2 C, 3 D);
impl_raw_pixel_transform!(0 A, 1 B, 2 C, 3 D, 4 E);
impl_raw_pixel_transform!(0 A, 1 B, 2 C, 3 D, 4 E, 5 F);
impl_raw_pixel_transform!(0 A, 1 B, 2 C, 3 D, 4 E, 5 F, 6 G);
impl_raw_pixel_transform!(0 A, 1 B, 2 C, 3 D, 4 E, 5 F, 6 G, 7 H);
pub trait PixelTransform {
fn apply(&mut self, pixel: Pixel) -> [u16; CHANNELS_IN_RGB];
}
@@ -50,17 +58,26 @@ impl<T: Fn(Pixel) -> [u16; CHANNELS_IN_RGB]> PixelTransform for T {
}
}
fortuples! {
#[tuples::min_size(1)]
#[tuples::max_size(8)]
impl PixelTransform for #Tuple
where
#(#Member: PixelTransform),*
{
fn apply(&mut self, mut pixel: Pixel) -> [u16; CHANNELS_IN_RGB] {
#(pixel.values = #self.apply(pixel);)*
macro_rules! impl_pixel_transform {
($($idx:tt $t:tt),+) => {
impl<$($t,)+> PixelTransform for ($($t,)+)
where
$($t: PixelTransform,)+
{
fn apply(&mut self, mut pixel: Pixel) -> [u16; CHANNELS_IN_RGB] {
$(pixel.values = self.$idx.apply(pixel);)*
pixel.values
}
}
pixel.values
}
}
};
}
impl_pixel_transform!(0 A);
impl_pixel_transform!(0 A, 1 B);
impl_pixel_transform!(0 A, 1 B, 2 C);
impl_pixel_transform!(0 A, 1 B, 2 C, 3 D);
impl_pixel_transform!(0 A, 1 B, 2 C, 3 D, 4 E);
impl_pixel_transform!(0 A, 1 B, 2 C, 3 D, 4 E, 5 F);
impl_pixel_transform!(0 A, 1 B, 2 C, 3 D, 4 E, 5 F, 6 G);
impl_pixel_transform!(0 A, 1 B, 2 C, 3 D, 4 E, 5 F, 6 G, 7 H);