photo 3.1.1

Image utility library
Documentation
use std::{
    error::Error,
    fmt::{self, Formatter, Result as FmtResult},
    io::Error as IoError,
};

/// Errors that can occur during PNG image operations.
#[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)
    }
}