mbus_core/transport/
error.rs1use core::fmt;
4
5use crate::errors::MbusError;
6
7use super::config::SerialMode;
8
9#[derive(Debug, PartialEq, Eq)]
11pub enum TransportError {
12 ConnectionFailed,
14 ConnectionClosed,
16 IoError,
18 Timeout,
20 BufferTooSmall,
22 Unexpected,
24 InvalidConfiguration,
26}
27
28impl fmt::Display for TransportError {
29 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
30 match self {
31 TransportError::ConnectionFailed => write!(f, "Connection failed"),
32 TransportError::ConnectionClosed => write!(f, "Connection closed"),
33 TransportError::IoError => write!(f, "I/O error"),
34 TransportError::Timeout => write!(f, "Timeout"),
35 TransportError::BufferTooSmall => write!(f, "Buffer too small"),
36 TransportError::Unexpected => write!(f, "An unexpected error occurred"),
37 TransportError::InvalidConfiguration => write!(f, "Invalid configuration"),
38 }
39 }
40}
41
42impl core::error::Error for TransportError {}
43
44impl From<TransportError> for MbusError {
45 fn from(err: TransportError) -> Self {
46 match err {
47 TransportError::ConnectionFailed => MbusError::ConnectionFailed,
48 TransportError::ConnectionClosed => MbusError::ConnectionClosed,
49 TransportError::IoError => MbusError::IoError,
50 TransportError::Timeout => MbusError::Timeout,
51 TransportError::BufferTooSmall => MbusError::BufferTooSmall,
52 TransportError::Unexpected => MbusError::Unexpected,
53 TransportError::InvalidConfiguration => MbusError::InvalidConfiguration,
54 }
55 }
56}
57
58#[derive(Debug, Clone, Copy, PartialEq, Eq)]
60pub enum TransportType {
61 StdTcp,
63 StdSerial(SerialMode),
65 CustomTcp,
67 CustomSerial(SerialMode),
69}
70
71impl TransportType {
72 pub fn is_tcp_type(&self) -> bool {
74 matches!(self, TransportType::StdTcp | TransportType::CustomTcp)
75 }
76
77 pub fn is_serial_type(&self) -> bool {
79 matches!(
80 self,
81 TransportType::StdSerial(_) | TransportType::CustomSerial(_)
82 )
83 }
84}