use thiserror::Error;
pub type Result<T> = std::result::Result<T, Jp2Error>;
#[derive(Debug, Error)]
pub enum Jp2Error {
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("Not a JPEG 2000 file: {0}")]
NotJp2(String),
#[error("Invalid JP2 box '{box_type}': {message}")]
InvalidBox {
box_type: String,
message: String,
},
#[error("Invalid codestream at offset {offset}: {message}")]
InvalidCodestream {
offset: usize,
message: String,
},
#[error("Invalid image dimensions: {width}×{height}×{components}")]
InvalidDimensions {
width: u32,
height: u32,
components: u16,
},
#[error("Component {index} out of range (image has {components} components)")]
ComponentOutOfRange {
index: usize,
components: usize,
},
#[error("Unsupported bit depth: {0}")]
UnsupportedBitDepth(u8),
#[error("Unsupported sample format: signed={signed}, bits={bits}")]
UnsupportedSampleFormat {
signed: bool,
bits: u8,
},
#[error("Unsupported coding parameter: {0}")]
UnsupportedCodingParam(String),
#[error("DWT buffer size mismatch: expected {expected}, got {actual}")]
DwtSizeMismatch {
expected: usize,
actual: usize,
},
#[error("Arithmetic overflow: {0}")]
Overflow(String),
#[error("Data size mismatch: expected {expected} samples, got {actual}")]
DataSizeMismatch {
expected: usize,
actual: usize,
},
#[error("Invalid GeoJP2 metadata: {0}")]
InvalidGeoMetadata(String),
#[error("Not yet implemented: {0}")]
NotImplemented(String),
}