use std::marker;
pub mod generic;
pub trait Converter {
type Pixel;
type Texel;
fn forward(&self, pixel: &Self::Pixel) -> Self::Texel;
fn inverse(&self, texel: &Self::Texel) -> Self::Pixel;
}
#[derive(Default)]
pub struct CopyConverter<T> {
_marker: marker::PhantomData<T>,
}
impl<T> CopyConverter<T> {
pub const fn new() -> Self {
Self {
_marker: marker::PhantomData,
}
}
}
impl<T> Converter for CopyConverter<T>
where
T: Copy,
{
type Pixel = T;
type Texel = T;
fn forward(&self, pixel: &Self::Pixel) -> Self::Texel {
*pixel
}
fn inverse(&self, texel: &Self::Texel) -> Self::Pixel {
*texel
}
}