alpaca_fix/
error.rs

1//! FIX protocol error types.
2
3use thiserror::Error;
4
5/// FIX protocol errors.
6#[derive(Debug, Error)]
7pub enum FixError {
8    /// Connection error.
9    #[error("connection error: {0}")]
10    Connection(String),
11
12    /// Session error.
13    #[error("session error: {0}")]
14    Session(String),
15
16    /// Message encoding error.
17    #[error("encoding error: {0}")]
18    Encoding(String),
19
20    /// Message decoding error.
21    #[error("decoding error: {0}")]
22    Decoding(String),
23
24    /// Invalid message format.
25    #[error("invalid message: {0}")]
26    InvalidMessage(String),
27
28    /// Sequence number error.
29    #[error("sequence error: expected {expected}, got {actual}")]
30    SequenceError {
31        /// Expected sequence number.
32        expected: u64,
33        /// Actual sequence number.
34        actual: u64,
35    },
36
37    /// Authentication error.
38    #[error("authentication error: {0}")]
39    Authentication(String),
40
41    /// Timeout error.
42    #[error("timeout: {0}")]
43    Timeout(String),
44
45    /// IO error.
46    #[error("io error: {0}")]
47    Io(#[from] std::io::Error),
48
49    /// Configuration error.
50    #[error("configuration error: {0}")]
51    Configuration(String),
52
53    /// Rejected message.
54    #[error("message rejected: {0}")]
55    Rejected(String),
56}
57
58/// Result type for FIX operations.
59pub type Result<T> = std::result::Result<T, FixError>;
60
61#[cfg(test)]
62mod tests {
63    use super::*;
64
65    #[test]
66    fn test_fix_error_display() {
67        let err = FixError::Connection("failed to connect".to_string());
68        assert_eq!(err.to_string(), "connection error: failed to connect");
69    }
70
71    #[test]
72    fn test_sequence_error() {
73        let err = FixError::SequenceError {
74            expected: 10,
75            actual: 5,
76        };
77        assert_eq!(err.to_string(), "sequence error: expected 10, got 5");
78    }
79}