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
49#[cfg(test)]
50mod tests {
51    use super::*;
52
53    #[test]
54    #[allow(clippy::redundant_clone)]
55    fn connect_error_clone() {
56        let _ = ConnectError::Resolver(io::Error::other("test")).clone();
57        let _ = ConnectError::NoRecords.clone();
58        let _ = ConnectError::InvalidInput.clone();
59        let _ = ConnectError::Unresolved.clone();
60        let _ = ConnectError::Io(io::Error::other("test")).clone();
61    }
62}