use std::{
error::Error,
fmt::{self, Formatter, Result as FmtResult},
io::Error as IoError,
};
#[derive(Debug)]
pub enum PngError {
IoError(IoError),
PngError(png::DecodingError),
EncodingError(png::EncodingError),
UnsupportedColourType(png::ColorType),
UnsupportedBitDepth(png::BitDepth),
InvalidChannelCount,
InvalidData,
}
impl fmt::Display for PngError {
fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
match self {
PngError::IoError(err) => write!(f, "IO error: {err}"),
PngError::PngError(err) => write!(f, "PNG decoding error: {err}"),
PngError::EncodingError(err) => write!(f, "PNG encoding error: {err}"),
PngError::UnsupportedColourType(colour_type) => write!(f, "Unsupported colour type: {colour_type:?}"),
PngError::UnsupportedBitDepth(bit_depth) => write!(f, "Unsupported bit depth: {bit_depth:?}"),
PngError::InvalidChannelCount => write!(f, "Invalid channel count for colour type"),
PngError::InvalidData => write!(f, "Invalid data in PNG file"),
}
}
}
impl Error for PngError {}
impl From<IoError> for PngError {
fn from(err: IoError) -> Self {
PngError::IoError(err)
}
}
impl From<png::DecodingError> for PngError {
fn from(err: png::DecodingError) -> Self {
PngError::PngError(err)
}
}
impl From<png::EncodingError> for PngError {
fn from(err: png::EncodingError) -> Self {
PngError::EncodingError(err)
}
}