use std::{
fmt::{self, Display},
io, num,
};
#[non_exhaustive]
#[derive(Debug)]
pub enum MoshError {
DecodingError(png::DecodingError),
EncodingError(png::EncodingError),
InvalidPalette,
IoError(io::Error),
ConversionError(num::TryFromIntError),
RngError(rand::distr::uniform::Error),
OutOfMemory,
}
impl std::error::Error for MoshError {}
impl Display for MoshError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::DecodingError(e) => Display::fmt(e, f),
Self::EncodingError(e) => Display::fmt(e, f),
Self::InvalidPalette => f.write_str("Invalid image palette"),
Self::IoError(e) => Display::fmt(e, f),
Self::ConversionError(e) => Display::fmt(e, f),
Self::RngError(e) => Display::fmt(e, f),
Self::OutOfMemory => f.write_str("Out of memory"),
}
}
}
impl From<io::Error> for MoshError {
fn from(e: io::Error) -> Self {
Self::IoError(e)
}
}
impl From<num::TryFromIntError> for MoshError {
fn from(e: num::TryFromIntError) -> Self {
Self::ConversionError(e)
}
}
impl From<png::DecodingError> for MoshError {
fn from(e: png::DecodingError) -> Self {
Self::DecodingError(e)
}
}
impl From<png::EncodingError> for MoshError {
fn from(e: png::EncodingError) -> Self {
Self::EncodingError(e)
}
}
impl From<rand::distr::uniform::Error> for MoshError {
fn from(e: rand::distr::uniform::Error) -> Self {
Self::RngError(e)
}
}