rusty_vision/error/
mod.rs

1use std::io::{self, ErrorKind};
2
3#[derive(Debug)]
4#[allow(clippy::enum_variant_names)]
5pub enum Error {
6    IOError(io::Error),
7    ImageDecodeError(io::Error),
8    ImageEncodeError(io::Error),
9    IndexOutOfBounds(String),
10    InvalidChannel(String),
11    NotImplemented(String),
12}
13
14impl std::fmt::Display for Error {
15    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
16        match self {
17            Error::IOError(error) => write!(f, "I/O error: {}", error),
18            Error::ImageDecodeError(error) => write!(f, "Image decode error: {}", error),
19            Error::ImageEncodeError(error) => write!(f, "Image encode error: {}", error),
20            Error::IndexOutOfBounds(details) => write!(f, "Index out of bounds: {}", details),
21            Error::InvalidChannel(_) => todo!(),
22            Error::NotImplemented(_) => todo!(),
23        }
24    }
25}
26
27impl std::error::Error for Error {
28    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
29        match self {
30            Error::IOError(error) => Some(error),
31            Error::ImageDecodeError(error) => Some(error),
32            Error::ImageEncodeError(error) => Some(error),
33            Error::IndexOutOfBounds(_) => None,
34            Error::InvalidChannel(_) => todo!(),
35            Error::NotImplemented(_) => todo!(),
36        }
37    }
38}
39
40impl From<io::Error> for Error {
41    fn from(err: io::Error) -> Self {
42        Error::IOError(err)
43    }
44}
45
46impl From<Error> for io::Error {
47    fn from(err: Error) -> Self {
48        match err {
49            Error::IOError(error) => error,
50            Error::ImageDecodeError(error) => error,
51            Error::ImageEncodeError(error) => error,
52            Error::IndexOutOfBounds(details) => io::Error::new(ErrorKind::Other, details),
53            Error::InvalidChannel(_) => todo!(),
54            Error::NotImplemented(_) => todo!(),
55        }
56    }
57}