dstar_gateway_core/error/
protocol.rs1use crate::codec::dcs::error::DcsError;
4use crate::codec::dextra::error::DExtraError as DExtraCodecError;
5use crate::codec::dplus::error::DPlusError;
6
7#[derive(Debug, Clone, thiserror::Error, PartialEq, Eq)]
9#[non_exhaustive]
10pub enum ProtocolError {
11 #[error(transparent)]
13 DPlus(#[from] DPlusError),
14
15 #[error(transparent)]
17 DExtra(#[from] DExtraCodecError),
18
19 #[error(transparent)]
21 Dcs(#[from] DcsError),
22}
23
24#[cfg(test)]
25mod tests {
26 use super::*;
27
28 #[test]
29 fn protocol_error_dplus_display() {
30 let inner = DPlusError::StreamIdZero;
31 let err = ProtocolError::DPlus(inner);
32 assert!(err.to_string().contains("DPlus stream id is zero"));
33 }
34
35 #[test]
36 fn protocol_error_dextra_display() {
37 let inner = DExtraCodecError::StreamIdZero;
38 let err = ProtocolError::DExtra(inner);
39 assert!(err.to_string().contains("DExtra stream id is zero"));
40 }
41
42 #[test]
43 fn protocol_error_dcs_display() {
44 let inner = DcsError::StreamIdZero;
45 let err = ProtocolError::Dcs(inner);
46 assert!(err.to_string().contains("DCS stream id is zero"));
47 }
48
49 #[test]
50 fn from_dplus_error_composes_into_protocol_error() {
51 let inner = DPlusError::UnknownPacketLength { got: 42 };
52 let outer: ProtocolError = inner.into();
53 assert!(matches!(
54 outer,
55 ProtocolError::DPlus(DPlusError::UnknownPacketLength { got: 42 })
56 ));
57 }
58
59 #[test]
60 fn from_dextra_error_composes_into_protocol_error() {
61 let inner = DExtraCodecError::UnknownPacketLength { got: 42 };
62 let outer: ProtocolError = inner.into();
63 assert!(matches!(
64 outer,
65 ProtocolError::DExtra(DExtraCodecError::UnknownPacketLength { got: 42 })
66 ));
67 }
68
69 #[test]
70 fn from_dcs_error_composes_into_protocol_error() {
71 let inner = DcsError::UnknownPacketLength { got: 42 };
72 let outer: ProtocolError = inner.into();
73 assert!(matches!(
74 outer,
75 ProtocolError::Dcs(DcsError::UnknownPacketLength { got: 42 })
76 ));
77 }
78
79 #[test]
80 fn from_dplus_error_composes_into_top_level_error() {
81 let inner = DPlusError::StreamIdZero;
82 let top: crate::error::Error = ProtocolError::DPlus(inner).into();
83 assert!(matches!(
84 top,
85 crate::error::Error::Protocol(ProtocolError::DPlus(DPlusError::StreamIdZero))
86 ));
87 }
88
89 #[test]
90 fn from_dcs_error_composes_into_top_level_error() {
91 let inner = DcsError::StreamIdZero;
92 let top: crate::error::Error = ProtocolError::Dcs(inner).into();
93 assert!(matches!(
94 top,
95 crate::error::Error::Protocol(ProtocolError::Dcs(DcsError::StreamIdZero))
96 ));
97 }
98}