cliquenet/
error.rs

1use std::io;
2
3use hotshot_types::addr::NetAddr;
4use thiserror::Error;
5
6use crate::frame::InvalidHeader;
7
8/// The empty type has no values.
9#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
10pub(crate) enum Empty {}
11
12/// The various errors that can occur during networking.
13#[derive(Debug, Error)]
14pub enum NetworkError {
15    /// Generic I/O error.
16    #[error("i/o error: {0}")]
17    Io(#[from] io::Error),
18
19    /// Bind error.
20    #[error("error binding to address {0}: {1}")]
21    Bind(NetAddr, #[source] io::Error),
22
23    /// The received frame header is not valid.
24    #[error("invalid frame header: {0}")]
25    InvalidFrameHeader(#[from] InvalidHeader),
26
27    /// The received frame has an unknown type.
28    #[error("unknown frame type: {0}")]
29    UnknownFrameType(u8),
30
31    /// Generic Noise error.
32    #[error("noise error: {0}")]
33    Noise(#[from] snow::Error),
34
35    /// The Noise handshake message is not valid.
36    #[error("invalid handshake message")]
37    InvalidHandshakeMessage,
38
39    /// The total message size exceeds the allowed maximum.
40    #[error("message too large")]
41    MessageTooLarge,
42
43    /// An MPSC channel is unexpectedly closed.
44    #[error("channel closed")]
45    ChannelClosed,
46
47    /// A receive budget has unexpectedly closed.
48    #[error("receive budget closed")]
49    BudgetClosed,
50
51    /// An operation timed out.
52    #[error("timeout")]
53    Timeout,
54}
55
56#[derive(Debug, Error)]
57#[error("network down")]
58pub struct NetworkDown(());
59
60impl NetworkDown {
61    pub(crate) const fn new() -> Self {
62        Self(())
63    }
64}
65
66impl From<NetworkDown> for NetworkError {
67    fn from(_: NetworkDown) -> Self {
68        Self::ChannelClosed
69    }
70}