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