use std::{error, ffi, fmt, io, num};
#[derive(Debug)]
pub enum Error {
CtxError(String),
ConfigError(String),
IoError(io::Error),
NulError(ffi::NulError),
NoError,
}
#[deprecated(since = "1.1.1", note = "Please use `Error` instead of `TlsError`")]
pub type TlsError = Error;
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Error::CtxError(s) => write!(f, "tls context: {}", s),
Error::ConfigError(s) => write!(f, "tls config: {}", s),
Error::IoError(err) => err.fmt(f),
Error::NulError(err) => err.fmt(f),
Error::NoError => write!(f, "no error"),
}
}
}
impl error::Error for Error {
fn source(&self) -> Option<&(dyn error::Error + 'static)> {
None
}
}
impl From<io::Error> for Error {
fn from(err: io::Error) -> Self {
Error::IoError(err)
}
}
impl From<ffi::NulError> for Error {
fn from(err: ffi::NulError) -> Self {
Error::NulError(err)
}
}
impl From<num::TryFromIntError> for Error {
fn from(err: num::TryFromIntError) -> Self {
Error::IoError(io::Error::new(io::ErrorKind::Other, err))
}
}
impl From<Error> for io::Error {
fn from(err: Error) -> Self {
io::Error::new(io::ErrorKind::Other, err)
}
}
pub type Result<T> = std::result::Result<T, Error>;
pub trait LastError {
fn last_error(&self) -> Result<String>;
fn to_error<T>(errstr: String) -> Result<T> {
Err(Error::ConfigError(errstr))
}
}