Skip to main content

mill_net/
errors.rs

1use crate::tcp::ConnectionId;
2use std::fmt;
3use std::io;
4use std::net::SocketAddr;
5
6pub use mill_io::error::Result;
7
8#[derive(Debug)]
9pub enum NetworkError {
10    Io(Box<dyn std::error::Error>),
11    Accept(Box<dyn std::error::Error>),
12    Connect(Box<dyn std::error::Error>),
13    PoisonedLock(String),
14    MaxConnectionsReached(SocketAddr),
15    Configuration(String),
16    HandlerError(String),
17    EventLoopGone,
18    ConnectionNotFound(ConnectionId),
19    Other(String),
20}
21
22impl fmt::Display for NetworkError {
23    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24        match self {
25            NetworkError::Io(e) => write!(f, "IO Error: {}", e),
26            NetworkError::Accept(e) => write!(f, "Accept Error: {}", e),
27            NetworkError::Connect(e) => write!(f, "Connect Error: {}", e),
28            NetworkError::PoisonedLock(msg) => write!(f, "Lock Poisoned: {}", msg),
29            NetworkError::MaxConnectionsReached(addr) => {
30                write!(f, "Max connections reached, rejecting {}", addr)
31            }
32            NetworkError::Configuration(msg) => write!(f, "Configuration Error: {}", msg),
33            NetworkError::HandlerError(msg) => write!(f, "Handler Error: {}", msg),
34            NetworkError::EventLoopGone => write!(f, "EventLoop is gone"),
35            NetworkError::ConnectionNotFound(conn_id) => {
36                write!(f, "Connection not found: {:?}", conn_id)
37            }
38            NetworkError::Other(msg) => write!(f, "Error: {}", msg),
39        }
40    }
41}
42
43impl std::error::Error for NetworkError {}
44
45impl From<io::Error> for NetworkError {
46    fn from(err: io::Error) -> Self {
47        NetworkError::Io(Box::new(err))
48    }
49}
50
51#[derive(Debug)]
52pub enum NetworkEvent {
53    ConnectionEstablished(ConnectionId, SocketAddr),
54    ConnectionClosed(ConnectionId),
55    Listening(SocketAddr),
56}