rusty_modbus_tcp/error.rs
1//! Transport error types.
2
3use rusty_modbus_frame::FrameError;
4use rusty_modbus_types::FunctionCode;
5
6/// Errors that can occur during transport operations.
7#[derive(Debug, thiserror::Error)]
8pub enum TransportError {
9 /// Underlying I/O error.
10 #[error("I/O error: {0}")]
11 Io(#[from] std::io::Error),
12
13 /// Frame-level error (decode, encode, CRC, protocol ID).
14 #[error("frame error: {0}")]
15 Frame(#[from] FrameError),
16
17 /// Operation timed out.
18 #[error("operation timed out")]
19 Timeout,
20
21 /// Connection was closed by the remote peer.
22 #[error("disconnected")]
23 Disconnected,
24
25 /// Connection denied by access control.
26 #[error("access denied")]
27 AccessDenied,
28
29 /// TLS handshake failure (used by `modbus-tls`, defined here for `TransportError` unification).
30 #[error("TLS handshake failed: {0}")]
31 TlsHandshake(String),
32
33 /// Authorization denied by server policy.
34 #[error("authorization denied for role {role:?} on {function_code}")]
35 AuthorizationDenied {
36 /// Client role from certificate (if any).
37 role: Option<String>,
38 /// The function code that was denied.
39 function_code: FunctionCode,
40 },
41}
42
43/// TCP-specific error type (wraps `TransportError` for TCP context).
44pub type TcpError = TransportError;