use std::io;
#[derive(thiserror::Error, Debug)]
pub enum ConnectError {
    #[error("Failed resolving hostname: {0}")]
    Resolver(io::Error),
    #[error("No dns records found for the input")]
    NoRecords,
    #[error("Invalid input")]
    InvalidInput,
    #[error("Connector received `Connect` method with unresolved host")]
    Unresolved,
    #[error("{0}")]
    Io(#[from] io::Error),
}
impl Clone for ConnectError {
    fn clone(&self) -> Self {
        match self {
            ConnectError::Resolver(err) => {
                ConnectError::Resolver(io::Error::new(err.kind(), format!("{}", err)))
            }
            ConnectError::NoRecords => ConnectError::NoRecords,
            ConnectError::InvalidInput => ConnectError::InvalidInput,
            ConnectError::Unresolved => ConnectError::Unresolved,
            ConnectError::Io(err) => {
                ConnectError::Io(io::Error::new(err.kind(), format!("{}", err)))
            }
        }
    }
}
#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    #[allow(clippy::redundant_clone)]
    fn connect_error_clone() {
        let _ =
            ConnectError::Resolver(io::Error::new(io::ErrorKind::Other, "test")).clone();
        let _ = ConnectError::NoRecords.clone();
        let _ = ConnectError::InvalidInput.clone();
        let _ = ConnectError::Unresolved.clone();
        let _ = ConnectError::Io(io::Error::new(io::ErrorKind::Other, "test")).clone();
    }
}