//! Module containing error handling logic. | |
use std::{ | |
fmt::{self, Display, Formatter}, | |
io, | |
}; | |
use crate::impl_from; | |
/// The `crossterm` result type. | |
pub type Result<T> = std::result::Result<T, ErrorKind>; | |
/// Wrapper for all errors that can occur in `crossterm`. | |
#[derive(Debug)] | |
#[non_exhaustive] | |
pub enum ErrorKind { | |
IoError(io::Error), | |
FmtError(fmt::Error), | |
Utf8Error(std::string::FromUtf8Error), | |
ParseIntError(std::num::ParseIntError), | |
ResizingTerminalFailure(String), | |
SettingTerminalTitleFailure, | |
} | |
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); |