ntex_net/connect/
error.rs1use std::io;
2
3use ntex_error::ErrorDiagnostic;
4
5#[derive(thiserror::Error, Debug, Copy, Clone)]
6pub enum ConnectServiceError {
7 #[error("Cannot create connect service")]
9 CannotCreateService,
10}
11
12#[derive(thiserror::Error, Debug)]
13pub enum ConnectError {
14 #[error("Failed resolving hostname: {0}")]
16 Resolver(io::Error),
17
18 #[error("No dns records found for the input")]
20 NoRecords,
21
22 #[error("Invalid input")]
24 InvalidInput,
25
26 #[error("Connector received `Connect` method with unresolved host")]
28 Unresolved,
29
30 #[error("{0}")]
32 Io(#[from] io::Error),
33}
34
35impl Clone for ConnectError {
36 fn clone(&self) -> Self {
37 match self {
38 ConnectError::Resolver(err) => {
39 ConnectError::Resolver(io::Error::new(err.kind(), format!("{err}")))
40 }
41 ConnectError::NoRecords => ConnectError::NoRecords,
42 ConnectError::InvalidInput => ConnectError::InvalidInput,
43 ConnectError::Unresolved => ConnectError::Unresolved,
44 ConnectError::Io(err) => {
45 ConnectError::Io(io::Error::new(err.kind(), format!("{err}")))
46 }
47 }
48 }
49}
50
51impl From<ConnectServiceError> for io::Error {
52 fn from(err: ConnectServiceError) -> io::Error {
53 io::Error::other(err)
54 }
55}
56
57impl ErrorDiagnostic for ConnectError {
58 fn signature(&self) -> &'static str {
59 match self {
60 ConnectError::InvalidInput => "ntex-connect-InvalidInput",
61 ConnectError::Resolver(_) => "ntex-connect-Resolver",
62 ConnectError::NoRecords => "ntex-connect-NoRecords",
63 ConnectError::Unresolved => "ntex-connect-Unresolved",
64 ConnectError::Io(err) => err.signature(),
65 }
66 }
67}
68
69#[cfg(test)]
70mod tests {
71 use super::*;
72
73 #[test]
74 #[allow(clippy::redundant_clone)]
75 fn connect_error_clone() {
76 let _ = ConnectError::Resolver(io::Error::other("test")).clone();
77 let _ = ConnectError::NoRecords.clone();
78 let _ = ConnectError::InvalidInput.clone();
79 let _ = ConnectError::Unresolved.clone();
80 let _ = ConnectError::Io(io::Error::other("test")).clone();
81 }
82
83 #[test]
84 fn error_diagnostic() {
85 let err = ConnectError::InvalidInput;
86 assert_eq!(err.signature(), "ntex-connect-InvalidInput");
87
88 let err = ConnectError::Resolver(io::Error::other("test"));
89 assert_eq!(err.signature(), "ntex-connect-Resolver");
90
91 let err = ConnectError::NoRecords;
92 assert_eq!(err.signature(), "ntex-connect-NoRecords");
93
94 let err = ConnectError::Unresolved;
95 assert_eq!(err.signature(), "ntex-connect-Unresolved");
96
97 let err = ConnectError::Io(io::Error::new(io::ErrorKind::InvalidInput, "test"));
98 assert_eq!(err.signature(), "io-InvalidInput");
99
100 let err = ConnectError::Io(io::Error::other("test"));
101 assert_eq!(err.signature(), "io-Error");
102 }
103}