1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
use std::io::Write; /// Enum representing all possible values the application can fail. #[derive(Debug, Clone, Hash, PartialEq, Eq)] pub enum Error { /// Failed to guess the image format. GuessingFormatFailed(String), /// Failed to open image file. OpeningImageFailed(String), } impl Error { /// Get the executable exit value from an `Error` instance. /// /// # Examples /// /// ``` /// # use termimage::Error; /// # use std::iter::FromIterator; /// let mut out = Vec::new(); /// Error::GuessingFormatFailed("not_image.rs".to_string()).print_error(&mut out); /// assert_eq!(String::from_iter(out.iter().map(|&i| i as char)), /// "Failed to guess format of \"not_image.rs\".\n".to_string()); /// ``` pub fn print_error<W: Write>(&self, err_out: &mut W) { match *self { Error::GuessingFormatFailed(ref fname) => writeln!(err_out, "Failed to guess format of \"{}\".", fname).unwrap(), Error::OpeningImageFailed(ref fname) => writeln!(err_out, "Failed to open image file \"{}\".", fname).unwrap(), } } /// Get the executable exit value from an `Error` instance. /// /// # Examples /// /// ``` /// # use std::process::exit; /// # use termimage::Error; /// assert_eq!(Error::GuessingFormatFailed("".to_string()).exit_value(), 1); /// assert_eq!(Error::OpeningImageFailed("".to_string()).exit_value(), 2); /// ``` pub fn exit_value(&self) -> i32 { match *self { Error::GuessingFormatFailed(_) => 1, Error::OpeningImageFailed(_) => 2, } } }