use thiserror::Error;
#[derive(Debug, Error)]
#[non_exhaustive]
pub enum OneIoError {
#[error("IO error: {0}")]
Io(#[from] std::io::Error),
#[error("{0}")]
Network(Box<dyn std::error::Error + Send + Sync>),
#[error("{url}: {source}")]
NetworkWithContext {
source: Box<dyn std::error::Error + Send + Sync>,
url: String,
},
#[error("{service} status error: {code}")]
Status { service: &'static str, code: u16 },
#[error("Invalid header: {0}")]
InvalidHeader(String),
#[error("Invalid certificate: {0}")]
InvalidCertificate(String),
#[error("Not supported: {0}")]
NotSupported(String),
}
#[cfg(feature = "http")]
impl From<reqwest::Error> for OneIoError {
fn from(err: reqwest::Error) -> Self {
OneIoError::Network(Box::new(err))
}
}
#[cfg(feature = "ftp")]
impl From<suppaftp::FtpError> for OneIoError {
fn from(err: suppaftp::FtpError) -> Self {
OneIoError::Network(Box::new(err))
}
}
#[cfg(feature = "json")]
impl From<serde_json::Error> for OneIoError {
fn from(err: serde_json::Error) -> Self {
OneIoError::Network(Box::new(err))
}
}
#[cfg(feature = "s3")]
impl From<s3::error::S3Error> for OneIoError {
fn from(err: s3::error::S3Error) -> Self {
OneIoError::Network(Box::new(err))
}
}
#[cfg(feature = "s3")]
impl From<s3::creds::error::CredentialsError> for OneIoError {
fn from(err: s3::creds::error::CredentialsError) -> Self {
OneIoError::Network(Box::new(err))
}
}
#[cfg(feature = "s3")]
impl From<s3::region::error::RegionError> for OneIoError {
fn from(err: s3::region::error::RegionError) -> Self {
OneIoError::Network(Box::new(err))
}
}