use crate::{
error::Error,
protocol::{
caps::set_window::ColorInterleaving, curves::Curves, data::CooperativeAction, image::Layout,
},
};
#[derive(Debug, Clone)]
pub struct Pass {
pub layout: Layout,
pub cooperation: Vec<CooperativeAction>,
pub complete: bool,
pub rows: usize,
pub cols: usize,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Progress {
pub bytes: u64,
pub total: u64,
pub blocks: usize,
}
pub fn decoder<'a>(
layout: &Layout,
curves: Option<&'a Curves>,
) -> Result<crate::protocol::decode::Decoder<'a>, Error> {
let decoder = crate::protocol::decode::Decoder::new(layout)?;
match curves.filter(|_| {
layout
.interleaving
.contains(ColorInterleaving::MULTILINE_SIMULTANEOUS)
}) {
Some(curves) => Ok(decoder.correcting(curves)),
None => Ok(decoder),
}
}