use std::fmt;
pub type Result<T> = std::result::Result<T, WebpError>;
#[derive(Debug)]
pub enum WebpError {
InvalidData(String),
Unsupported(String),
Eof,
NeedMore,
}
impl WebpError {
pub fn invalid(msg: impl Into<String>) -> Self {
Self::InvalidData(msg.into())
}
pub fn unsupported(msg: impl Into<String>) -> Self {
Self::Unsupported(msg.into())
}
}
impl fmt::Display for WebpError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::InvalidData(s) => write!(f, "invalid data: {s}"),
Self::Unsupported(s) => write!(f, "unsupported: {s}"),
Self::Eof => write!(f, "end of stream"),
Self::NeedMore => write!(f, "need more data"),
}
}
}
impl std::error::Error for WebpError {}
impl From<oxideav_vp8::Vp8Error> for WebpError {
fn from(e: oxideav_vp8::Vp8Error) -> Self {
match e {
oxideav_vp8::Vp8Error::InvalidData(s) => WebpError::InvalidData(s),
oxideav_vp8::Vp8Error::Unsupported(s) => WebpError::Unsupported(s),
oxideav_vp8::Vp8Error::Eof => WebpError::Eof,
oxideav_vp8::Vp8Error::NeedMore => WebpError::NeedMore,
}
}
}