//! Module containing error handling logic. use std::{ fmt::{self, Display, Formatter}, io, }; use crate::impl_from; /// The `crossterm` result type. pub type Result = std::result::Result; /// Wrapper for all errors that can occur in `crossterm`. #[derive(Debug)] pub enum ErrorKind { IoError(io::Error), FmtError(fmt::Error), Utf8Error(std::string::FromUtf8Error), ParseIntError(std::num::ParseIntError), ResizingTerminalFailure(String), SettingTerminalTitleFailure, #[doc(hidden)] __Nonexhaustive, } impl std::error::Error for ErrorKind { fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { match self { ErrorKind::IoError(e) => Some(e), ErrorKind::FmtError(e) => Some(e), ErrorKind::Utf8Error(e) => Some(e), ErrorKind::ParseIntError(e) => Some(e), _ => None, } } } impl Display for ErrorKind { fn fmt(&self, fmt: &mut Formatter<'_>) -> fmt::Result { match *self { ErrorKind::IoError(_) => write!(fmt, "IO-error occurred"), ErrorKind::ResizingTerminalFailure(_) => write!(fmt, "Cannot resize the terminal"), _ => write!(fmt, "Some error has occurred"), } } } impl_from!(io::Error, ErrorKind::IoError); impl_from!(fmt::Error, ErrorKind::FmtError); impl_from!(std::string::FromUtf8Error, ErrorKind::Utf8Error); impl_from!(std::num::ParseIntError, ErrorKind::ParseIntError);