use crate::resize::OutputResolution;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Config {
pub quality: u8,
pub alpha_quality: u8,
pub speed: u8,
pub strip_exif: bool,
pub max_input_bytes: u64,
pub max_pixels: u64,
pub memory_limit_bytes: u64,
pub output_resolutions: Vec<OutputResolution>,
}
impl Default for Config {
fn default() -> Self {
Self {
quality: 8,
alpha_quality: 8,
speed: 6,
strip_exif: true,
max_input_bytes: 100 * 1024 * 1024,
max_pixels: 16_384 * 16_384,
memory_limit_bytes: 512 * 1024 * 1024,
output_resolutions: vec![OutputResolution::Original],
}
}
}
impl Config {
#[must_use]
pub fn quality(mut self, q: u8) -> Self {
self.quality = q.clamp(1, 10);
self
}
#[must_use]
pub fn alpha_quality(mut self, q: u8) -> Self {
self.alpha_quality = q.clamp(1, 10);
self
}
#[must_use]
pub fn speed(mut self, s: u8) -> Self {
self.speed = s.clamp(1, 10);
self
}
#[must_use]
pub fn strip_exif(mut self, strip: bool) -> Self {
self.strip_exif = strip;
self
}
#[must_use]
pub fn max_input_bytes(mut self, bytes: u64) -> Self {
self.max_input_bytes = bytes;
self
}
#[must_use]
pub fn max_pixels(mut self, p: u64) -> Self {
self.max_pixels = p;
self
}
#[must_use]
pub fn memory_limit_bytes(mut self, bytes: u64) -> Self {
self.memory_limit_bytes = bytes;
self
}
#[must_use]
pub fn output_resolutions(mut self, resolutions: Vec<OutputResolution>) -> Self {
self.output_resolutions = resolutions;
self
}
#[must_use]
pub fn lambda_cost_optimized() -> Self {
Self {
quality: 8,
alpha_quality: 8,
speed: 10,
strip_exif: true,
max_input_bytes: 50 * 1024 * 1024,
max_pixels: 16_384 * 16_384,
memory_limit_bytes: 512 * 1024 * 1024,
output_resolutions: vec![OutputResolution::Original],
}
}
}