use thiserror::Error;
#[derive(Error, Debug)]
pub enum ImgiiError {
#[error("{0}")]
Font(#[from] FontError),
#[error("{0}")]
Parse(#[from] ParseError),
#[error("{0}")]
Image(#[from] ImageError),
#[error("{0}")]
Io(#[from] std::io::Error),
#[error("{0}")]
Other(#[from] anyhow::Error),
#[error("invalid argument(s) provided")]
InvalidArgument,
#[error("an internal error has occurred")]
Internal,
}
#[derive(Debug, Error, Clone)]
pub enum FontError {
#[error("could not load font {font_name}")]
FontLoad { font_name: String },
}
#[derive(Error, Debug, Clone)]
pub enum ParseError {
#[error("imgii regular expression failed ({0})")]
Regex(#[from] regex::Error),
#[error("could not parse int value from string due to {0}")]
ParseInt(#[from] std::num::ParseIntError),
#[error("could not parse value {value_name} from string ({the_str}), parse error ({err})")]
ParseColor {
value_name: String,
the_str: String,
err: std::num::ParseIntError,
},
}
#[derive(Error, Debug, Clone)]
pub enum ImageError {
#[error("invalid parameter {parameter_name} found")]
InvalidParameter { parameter_name: String },
#[error("parsing error found at row {image_row_number} of the image")]
ParseImage {
image_row_number: usize,
},
#[error("rendering failed because {reason}")]
Render {
reason: String,
},
}
impl From<regex::Error> for ImgiiError {
fn from(err: regex::Error) -> Self {
Self::Parse(ParseError::Regex(err))
}
}