milstd1553b_parser/
error.rs1use thiserror::Error;
4
5pub type Result<T> = std::result::Result<T, ParseError>;
7
8#[derive(Error, Debug, Clone, PartialEq, Eq)]
10pub enum ParseError {
11 #[error("Invalid word: {0}")]
13 InvalidWord(String),
14
15 #[error("Parity error: {0}")]
17 ParityError(String),
18
19 #[error("Invalid address: {0}")]
21 InvalidAddress(String),
22
23 #[error("Invalid message type: {0}")]
25 InvalidMessageType(String),
26
27 #[error("Insufficient data: {0}")]
29 InsufficientData(String),
30
31 #[error("Invalid Manchester encoding: {0}")]
33 InvalidManchesterEncoding(String),
34
35 #[error("Invalid command: {0}")]
37 InvalidCommand(String),
38
39 #[error("Invalid response: {0}")]
41 InvalidResponse(String),
42
43 #[error("Status error: {0}")]
45 StatusError(String),
46
47 #[error("Bus error: {0}")]
49 BusError(String),
50
51 #[error("Parse error: {0}")]
53 ParseFailed(String),
54
55 #[error("Validation error: {0}")]
57 ValidationError(String),
58}
59
60impl ParseError {
61 pub fn invalid_word(msg: impl Into<String>) -> Self {
63 ParseError::InvalidWord(msg.into())
64 }
65
66 pub fn parity_error(msg: impl Into<String>) -> Self {
68 ParseError::ParityError(msg.into())
69 }
70
71 pub fn invalid_address(msg: impl Into<String>) -> Self {
73 ParseError::InvalidAddress(msg.into())
74 }
75
76 pub fn invalid_message_type(msg: impl Into<String>) -> Self {
78 ParseError::InvalidMessageType(msg.into())
79 }
80
81 pub fn insufficient_data(msg: impl Into<String>) -> Self {
83 ParseError::InsufficientData(msg.into())
84 }
85
86 pub fn invalid_manchester(msg: impl Into<String>) -> Self {
88 ParseError::InvalidManchesterEncoding(msg.into())
89 }
90
91 pub fn parse_failed(msg: impl Into<String>) -> Self {
93 ParseError::ParseFailed(msg.into())
94 }
95
96 pub fn validation_error(msg: impl Into<String>) -> Self {
98 ParseError::ValidationError(msg.into())
99 }
100
101 pub fn invalid_command(msg: impl Into<String>) -> Self {
103 ParseError::InvalidCommand(msg.into())
104 }
105
106 pub fn invalid_response(msg: impl Into<String>) -> Self {
108 ParseError::InvalidResponse(msg.into())
109 }
110}
111
112#[cfg(test)]
113mod tests {
114 use super::*;
115
116 #[test]
117 fn test_error_display() {
118 let err = ParseError::invalid_word("test");
119 assert!(err.to_string().contains("Invalid word"));
120 }
121}