rusty_vision/error/
mod.rs1use 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}