pub mod full;
pub mod simple;
pub mod rgba;
use crate::error::{UnitResult};
#[derive(Debug)]
pub struct WriteOptions<P: OnWriteProgress> {
pub parallel_compression: bool,
pub pedantic: bool,
pub on_progress: P,
}
#[derive(Debug)]
pub struct ReadOptions<P: OnReadProgress> {
pub parallel_decompression: bool,
pub on_progress: P,
pub max_pixel_bytes: Option<usize>,
pub pedantic: bool,
}
pub mod write_options {
use super::*;
pub fn default() -> WriteOptions<()> { self::high() }
pub fn high() -> WriteOptions<()> {
WriteOptions {
parallel_compression: true, pedantic: true,
on_progress: (),
}
}
pub fn low() -> WriteOptions<()> {
WriteOptions {
parallel_compression: false, pedantic: true,
on_progress: (),
}
}
}
pub mod read_options {
use super::*;
const GIGABYTE: usize = 1_000_000_000;
pub fn default() -> ReadOptions<()> { self::high() }
pub fn high() -> ReadOptions<()> {
ReadOptions {
parallel_decompression: true,
max_pixel_bytes: Some(GIGABYTE),
on_progress: (),
pedantic: false,
}
}
pub fn low() -> ReadOptions<()> {
ReadOptions {
parallel_decompression: false,
max_pixel_bytes: Some(GIGABYTE),
on_progress: (),
pedantic: false,
}
}
}
pub trait OnWriteProgress {
#[must_use]
fn on_write_progressed(&mut self, progress: f32, bytes_written: usize) -> UnitResult;
}
pub trait OnReadProgress {
#[must_use]
fn on_read_progressed(&mut self, progress: f32) -> UnitResult;
}
impl<F> OnWriteProgress for F where F: FnMut(f32, usize) -> UnitResult {
#[inline] fn on_write_progressed(&mut self, progress: f32, bytes_written: usize) -> UnitResult { self(progress, bytes_written) }
}
impl<F> OnReadProgress for F where F: FnMut(f32) -> UnitResult {
#[inline] fn on_read_progressed(&mut self, progress: f32) -> UnitResult { self(progress) }
}
impl OnWriteProgress for () {
#[inline] fn on_write_progressed(&mut self, _progress: f32, _bytes_written: usize) -> UnitResult { Ok(()) }
}
impl OnReadProgress for () {
#[inline] fn on_read_progressed(&mut self, _progress: f32) -> UnitResult { Ok(()) }
}