tex-packer-core 0.3.0

Core algorithms and API for packing images into texture atlases (Skyline / MaxRects / Guillotine). Returns pages (RGBA) and metadata (JSON/Plist/templates).
Documentation
use thiserror::Error;

#[derive(Debug, Error)]
pub enum TexPackerError {
    #[error("I/O error: {0}")]
    Io(#[from] std::io::Error),

    #[error("Image error: {0}")]
    Image(#[from] image::ImageError),

    #[error("Invalid input: {0}")]
    InvalidInput(String),

    #[error(
        "Invalid dimensions for '{key}': width and height must be greater than 0 (got {width}x{height})"
    )]
    InvalidItemDimensions {
        key: String,
        width: u32,
        height: u32,
    },

    #[error("No packable inputs remain after preprocessing: {keys:?}")]
    NoPackableInputs { keys: Vec<String> },

    #[error("Invalid configuration: {0}")]
    InvalidConfig(String),

    #[error("Atlas invariant violation at {context}: {reason}")]
    InvariantViolation { context: String, reason: String },

    #[error("Invalid atlas document: {reason}")]
    InvalidDocument { reason: String },

    #[error(
        "Texture '{key}' ({width}x{height}) exceeds maximum atlas dimensions ({max_width}x{max_height})"
    )]
    TextureTooLarge {
        key: String,
        width: u32,
        height: u32,
        max_width: u32,
        max_height: u32,
    },

    #[error(
        "Out of space: unable to fit texture '{key}' ({width}x{height}) into atlas (tried {pages_attempted} page(s))"
    )]
    OutOfSpace {
        key: String,
        width: u32,
        height: u32,
        pages_attempted: usize,
    },

    #[error(
        "Out of space: unable to fit remaining textures into atlas (placed {placed}/{total} textures)"
    )]
    OutOfSpaceGeneric { placed: usize, total: usize },

    #[error("Nothing to pack: input list is empty")]
    Empty,

    #[error("Encoding error: {0}")]
    Encode(String),

    #[error("Invalid dimensions: width and height must be greater than 0 (got {width}x{height})")]
    InvalidDimensions { width: u32, height: u32 },

    #[error("Duplicate runtime key: '{key}'")]
    DuplicateKey { key: String },

    #[error(
        "Invalid padding configuration: border_padding ({border}) + texture_padding ({texture}) + texture_extrusion ({extrusion}) exceeds available space"
    )]
    InvalidPadding {
        border: u32,
        texture: u32,
        extrusion: u32,
    },
}

pub type Result<T> = std::result::Result<T, TexPackerError>;