use thiserror::Error;
#[derive(Debug, Error)]
pub enum Error {
#[error("network: {0}")]
Network(#[from] hyper::Error),
#[error("client: {0}")]
Client(#[from] hyper_util::client::legacy::Error),
#[error("io: {0}")]
Io(#[from] std::io::Error),
#[error("tls: {0}")]
Tls(#[from] tokio_rustls::rustls::Error),
#[error("certificate: {0}")]
Certificate(#[from] openssl::error::ErrorStack),
#[error("time: {0}")]
Time(#[from] std::time::SystemTimeError),
#[error("invalid header: {0}")]
InvalidHeader(#[from] hyper::header::InvalidHeaderValue),
#[error("task join: {0}")]
TaskJoin(#[from] tokio::task::JoinError),
#[error("script: {0}")]
Script(String),
#[error("{0}")]
Other(String),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_error_display() {
let err = Error::Other("test error".to_string());
assert_eq!(err.to_string(), "test error");
}
#[test]
fn test_io_error_conversion() {
let io_err = std::io::Error::other("io fail");
let err: Error = io_err.into();
assert!(err.to_string().contains("io"));
}
}