use std::fmt;
use std::io;
use std::string::FromUtf8Error;
#[derive(Debug)]
#[non_exhaustive]
pub enum LividError {
IoError(io::Error),
Utf8Error(FromUtf8Error),
NullError(std::ffi::NulError),
Internal(LividErrorKind),
EnvVarError(std::env::VarError),
ParseIntError(std::num::ParseIntError),
Unknown(String),
}
unsafe impl Send for LividError {}
unsafe impl Sync for LividError {}
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
#[non_exhaustive]
pub enum LividErrorKind {
FailedToRun,
FailedToLock,
FailedToSetScheme,
FailedOperation,
ResourceNotFound,
ImageFormatError,
TableError,
PrintError,
InvalidColor,
}
impl std::error::Error for LividError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
LividError::IoError(err) => Some(err),
LividError::NullError(err) => Some(err),
_ => None,
}
}
}
impl fmt::Display for LividError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
LividError::IoError(ref err) => err.fmt(f),
LividError::NullError(ref err) => err.fmt(f),
LividError::Internal(ref err) => write!(f, "An internal error occurred {:?}", err),
LividError::EnvVarError(ref err) => write!(f, "An env var error occurred {:?}", err),
LividError::Utf8Error(ref err) => {
write!(f, "A UTF8 conversion error occurred {:?}", err)
}
LividError::ParseIntError(ref err) => {
write!(f, "An int parsing error occurred {:?}", err)
}
LividError::Unknown(ref err) => write!(f, "An unknown error occurred {:?}", err),
}
}
}
impl From<io::Error> for LividError {
fn from(err: io::Error) -> LividError {
LividError::IoError(err)
}
}
impl From<std::ffi::NulError> for LividError {
fn from(err: std::ffi::NulError) -> LividError {
LividError::NullError(err)
}
}
impl From<std::env::VarError> for LividError {
fn from(err: std::env::VarError) -> LividError {
LividError::EnvVarError(err)
}
}
impl From<std::string::FromUtf8Error> for LividError {
fn from(err: std::string::FromUtf8Error) -> LividError {
LividError::Utf8Error(err)
}
}
impl From<std::num::ParseIntError> for LividError {
fn from(err: std::num::ParseIntError) -> LividError {
LividError::ParseIntError(err)
}
}