nautilus_betfair/stream/
error.rs1#[derive(Debug, Clone, thiserror::Error)]
20pub enum BetfairStreamError {
21 #[error("Connection failed: {0}")]
23 ConnectionFailed(String),
24 #[error("Authentication failed: {0}")]
26 AuthenticationFailed(String),
27 #[error("Protocol error: {0}")]
29 ProtocolError(String),
30 #[error("JSON error: {0}")]
32 JsonError(String),
33 #[error("Timeout: {0}")]
35 Timeout(String),
36 #[error("Disconnected: {0}")]
38 Disconnected(String),
39}
40
41impl From<serde_json::Error> for BetfairStreamError {
42 fn from(error: serde_json::Error) -> Self {
43 Self::JsonError(error.to_string())
44 }
45}
46
47#[cfg(test)]
48mod tests {
49 use rstest::rstest;
50
51 use super::*;
52
53 #[rstest]
54 #[case(
55 BetfairStreamError::ConnectionFailed("refused".to_string()),
56 "Connection failed: refused"
57 )]
58 #[case(
59 BetfairStreamError::AuthenticationFailed("invalid token".to_string()),
60 "Authentication failed: invalid token"
61 )]
62 #[case(
63 BetfairStreamError::ProtocolError("bad frame".to_string()),
64 "Protocol error: bad frame"
65 )]
66 #[case(
67 BetfairStreamError::JsonError("parse error".to_string()),
68 "JSON error: parse error"
69 )]
70 #[case(
71 BetfairStreamError::Timeout("read".to_string()),
72 "Timeout: read"
73 )]
74 #[case(
75 BetfairStreamError::Disconnected("reset".to_string()),
76 "Disconnected: reset"
77 )]
78 fn test_display(#[case] error: BetfairStreamError, #[case] expected: &str) {
79 assert_eq!(error.to_string(), expected);
80 }
81
82 #[rstest]
83 fn test_from_serde_error() {
84 let json_err = serde_json::from_str::<String>("bad").unwrap_err();
85 let err: BetfairStreamError = json_err.into();
86 assert!(matches!(err, BetfairStreamError::JsonError(_)));
87 }
88}