Skip to main content

cliquenet/
error.rs

1use std::io;
2
3use thiserror::Error;
4
5use crate::{NetAddr, x25519::PublicKey};
6pub use crate::{addr::InvalidNetAddr, msg::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 message trailer is not valid.
28    #[error("invalid message trailer")]
29    InvalidTrailer,
30
31    /// The received ack frame is not valid.
32    #[error("invalid ack frame")]
33    InvalidAck,
34
35    /// The received hello frame is not valid.
36    #[error("invalid hello frame")]
37    InvalidHello,
38
39    /// The received frame has an unknown type.
40    #[error("unknown frame type: {0}")]
41    UnknownFrameType(u8),
42
43    /// Version negotiation failed.
44    #[error("incompatible versions")]
45    IncompatibleVersions,
46
47    /// Generic Noise error.
48    #[error("noise error: {0}")]
49    Noise(#[from] snow::Error),
50
51    /// The Noise handshake message is not valid.
52    #[error("invalid handshake message")]
53    InvalidHandshakeMessage,
54
55    /// The total message size exceeds the allowed maximum.
56    #[error("message too large")]
57    MessageTooLarge,
58
59    /// An MPSC channel is unexpectedly closed.
60    #[error("channel closed")]
61    ChannelClosed,
62
63    /// A receive budget has unexpectedly closed.
64    #[error("receive budget closed")]
65    BudgetClosed,
66
67    /// An operation timed out.
68    #[error("timeout")]
69    Timeout,
70
71    /// A peer's I/O processing has been interrupted.
72    #[error("peer process interrupted")]
73    PeerInterrupt,
74
75    /// We have accumulated too many ACKs for a peer that we can not send
76    /// to the remote, meaning we can read fine, but not write properly.
77    #[error("too many pending acks for peer {0}")]
78    TooManyPendingAcks(PublicKey),
79}