use crate::{
decode::{Limits, RasterDecoder},
encode::RasterEncoder,
};
use futures::{AsyncRead, AsyncWrite};
use std::{ops::DerefMut, pin::Pin};
pub trait RasterPageFactory
where
Self: Sized,
{
type Header;
type Error;
const HEADER_SIZE: usize;
fn header_from_bytes(content: &[u8]) -> Result<Self::Header, Self::Error>;
fn header_to_bytes(target: &mut [u8], header: &Self::Header) -> Result<(), Self::Error>;
type Decoder<R>: RasterDecoder<R>
where
R: DerefMut<Target: AsyncRead>;
fn decode<R>(
header: &Self::Header,
reader: Pin<R>,
limits: &Limits,
) -> Result<Self::Decoder<R>, Self::Error>
where
R: DerefMut<Target: AsyncRead>;
type Encoder<W>: RasterEncoder<W>
where
W: DerefMut<Target: AsyncWrite>;
fn encode<W>(header: &Self::Header, writer: Pin<W>) -> Result<Self::Encoder<W>, Self::Error>
where
W: DerefMut<Target: AsyncWrite>;
}