use crate::{Error, Result};
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Limits {
pub max_text_bytes: usize,
pub max_definitions: usize,
pub max_palette_colors: usize,
pub max_sprite_side: u32,
pub max_layers: usize,
pub max_frames: usize,
pub max_tiles: usize,
pub max_map_side: u32,
pub max_glyphs: usize,
pub max_nesting: usize,
pub max_image_side: u32,
pub max_image_pixels: u64,
pub max_warnings: usize,
}
impl Default for Limits {
fn default() -> Self {
Self {
max_text_bytes: 4 * 1024 * 1024,
max_definitions: 4096,
max_palette_colors: 256,
max_sprite_side: 1024,
max_layers: 16,
max_frames: 1024,
max_tiles: 4096,
max_map_side: 1024,
max_glyphs: 4096,
max_nesting: 32,
max_image_side: 8192,
max_image_pixels: 16 * 1024 * 1024,
max_warnings: 1000,
}
}
}
impl Limits {
pub fn check_image(&self, width: u32, height: u32) -> Result<()> {
if width > self.max_image_side || height > self.max_image_side {
return Err(Error::limit(format!(
"Image of {width}x{height} pixels is larger than the limit of {} pixels a side",
self.max_image_side
)));
}
if width as u64 * height as u64 > self.max_image_pixels {
return Err(Error::limit(format!(
"Image of {width}x{height} pixels has more than the limit of {} pixels",
self.max_image_pixels
)));
}
Ok(())
}
}