ntex_net/connect/
error.rs

1use std::io;
2
3#[derive(thiserror::Error, Debug, Copy, Clone)]
4pub enum ConnectServiceError {
5    /// Cannot create connect service
6    #[error("Cannot create connect service")]
7    CannotCreateService,
8}
9
10#[derive(thiserror::Error, Debug)]
11pub enum ConnectError {
12    /// Failed to resolve the hostname
13    #[error("Failed resolving hostname: {0}")]
14    Resolver(io::Error),
15
16    /// No dns records
17    #[error("No dns records found for the input")]
18    NoRecords,
19
20    /// Invalid input
21    #[error("Invalid input")]
22    InvalidInput,
23
24    /// Unresolved host name
25    #[error("Connector received `Connect` method with unresolved host")]
26    Unresolved,
27
28    /// Connection io error
29    #[error("{0}")]
30    Io(#[from] io::Error),
31}
32
33impl Clone for ConnectError {
34    fn clone(&self) -> Self {
35        match self {
36            ConnectError::Resolver(err) => {
37                ConnectError::Resolver(io::Error::new(err.kind(), format!("{err}")))
38            }
39            ConnectError::NoRecords => ConnectError::NoRecords,
40            ConnectError::InvalidInput => ConnectError::InvalidInput,
41            ConnectError::Unresolved => ConnectError::Unresolved,
42            ConnectError::Io(err) => {
43                ConnectError::Io(io::Error::new(err.kind(), format!("{err}")))
44            }
45        }
46    }
47}
48
49impl From<ConnectServiceError> for io::Error {
50    fn from(err: ConnectServiceError) -> io::Error {
51        io::Error::other(err)
52    }
53}
54
55#[cfg(test)]
56mod tests {
57    use super::*;
58
59    #[test]
60    #[allow(clippy::redundant_clone)]
61    fn connect_error_clone() {
62        let _ = ConnectError::Resolver(io::Error::other("test")).clone();
63        let _ = ConnectError::NoRecords.clone();
64        let _ = ConnectError::InvalidInput.clone();
65        let _ = ConnectError::Unresolved.clone();
66        let _ = ConnectError::Io(io::Error::other("test")).clone();
67    }
68}