http_tunnel_common/
error.rs1use thiserror::Error;
2
3#[derive(Error, Debug)]
5pub enum TunnelError {
6 #[error("Invalid message format: {0}")]
7 InvalidMessage(String),
8
9 #[error("Connection error: {0}")]
10 ConnectionError(String),
11
12 #[error("Timeout waiting for response")]
13 Timeout,
14
15 #[error("Local service unavailable: {0}")]
16 LocalServiceUnavailable(String),
17
18 #[error("DynamoDB error: {0}")]
19 DynamoDbError(String),
20
21 #[error("WebSocket error: {0}")]
22 WebSocketError(String),
23
24 #[error("Serialization error: {0}")]
25 SerializationError(#[from] serde_json::Error),
26
27 #[error("Base64 decode error: {0}")]
28 Base64Error(#[from] base64::DecodeError),
29
30 #[error("HTTP error: {0}")]
31 HttpError(String),
32
33 #[error("Internal error: {0}")]
34 InternalError(String),
35}
36
37pub type Result<T> = std::result::Result<T, TunnelError>;
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn test_error_display() {
46 let err = TunnelError::InvalidMessage("test".to_string());
47 assert_eq!(err.to_string(), "Invalid message format: test");
48
49 let err = TunnelError::Timeout;
50 assert_eq!(err.to_string(), "Timeout waiting for response");
51 }
52
53 #[test]
54 fn test_error_conversion() {
55 let json_err = serde_json::from_str::<serde_json::Value>("invalid json");
56 assert!(json_err.is_err());
57
58 let tunnel_err: TunnelError = json_err.unwrap_err().into();
59 assert!(matches!(tunnel_err, TunnelError::SerializationError(_)));
60 }
61}