use thiserror::Error;
pub type Result<T> = std::result::Result<T, MesherError>;
#[derive(Error, Debug)]
pub enum MesherError {
#[error("ZIP error: {0}")]
Zip(#[from] zip::result::ZipError),
#[error("JSON parse error: {0}")]
Json(#[from] serde_json::Error),
#[error("Image error: {0}")]
Image(#[from] image::ImageError),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("Resource not found: {0}")]
ResourceNotFound(String),
#[error("Invalid resource pack: {0}")]
InvalidResourcePack(String),
#[error("Model resolution error: {0}")]
ModelResolution(String),
#[error("Blockstate resolution error: {0}")]
BlockstateResolution(String),
#[error("Unresolved texture reference: {0}")]
UnresolvedTexture(String),
#[error("Model inheritance too deep (possible circular reference): {0}")]
ModelInheritanceTooDeep(String),
#[error("Atlas building error: {0}")]
AtlasBuild(String),
#[error("Export error: {0}")]
Export(String),
}