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}