use thiserror::Error;
pub type Result<T> = std::result::Result<T, DppError>;
#[derive(Error, Debug)]
pub enum DppError {
#[error("invalid DMG magic: expected 'koly' trailer")]
InvalidMagic,
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("invalid koly header: {0}")]
InvalidKolyHeader(String),
#[error("invalid plist: {0}")]
InvalidPlist(String),
#[error("invalid block map: {0}")]
InvalidBlockMap(String),
#[error("decompression error: {0}")]
Decompression(String),
#[error("compression error: {0}")]
Compression(String),
#[error("unsupported compression type: {0:#x}")]
UnsupportedCompression(u32),
#[error("file not found: {0}")]
FileNotFound(String),
#[error("invalid path: {0}")]
InvalidPath(String),
#[error("base64 decode error: {0}")]
Base64Error(String),
#[error("XML parsing error: {0}")]
XmlError(String),
#[error("unsupported: {0}")]
Unsupported(String),
#[error("checksum mismatch: expected {expected:#x}, got {actual:#x}")]
ChecksumMismatch { expected: u32, actual: u32 },
}