use std::{error, fmt, io};
use image::ImageError;
#[derive(Debug)]
pub enum FractalError {
Io(io::Error),
Image(ImageError),
PathConversion(String),
SerializationError(String),
NotFound(String),
UnsupportedOperation(String),
TaskNotSet(String),
ConnectionError(String),
Other(String),
}
impl fmt::Display for FractalError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
FractalError::Io(e) => write!(f, "IO error: {}", e),
FractalError::Image(e) => write!(f, "Image error: {}", e),
FractalError::PathConversion(e) => write!(f, "Path conversion error: {}", e),
FractalError::SerializationError(e) => write!(f, "Serialization error: {}", e),
FractalError::NotFound(e) => write!(f, "Not found: {}", e),
FractalError::UnsupportedOperation(e) => write!(f, "Unsupported operation: {}", e),
FractalError::TaskNotSet(e) => write!(f, "Task not set: {}", e),
FractalError::ConnectionError(e) => write!(f, "Connection error: {}", e),
FractalError::Other(e) => write!(f, "An error occurred: {}", e),
}
}
}
impl error::Error for FractalError {}
impl From<io::Error> for FractalError {
fn from(e: io::Error) -> Self {
FractalError::Io(e)
}
}
impl From<String> for FractalError {
fn from(e: String) -> Self {
FractalError::Other(e)
}
}
impl From<serde_json::error::Error> for FractalError {
fn from(error: serde_json::error::Error) -> Self {
FractalError::SerializationError(error.to_string())
}
}