1use std::io;
2
3use thiserror::Error;
4
5use crate::{Version, addr::NetAddr, x25519::PublicKey};
6pub use crate::{addr::InvalidNetAddr, msg::InvalidHeader};
7
8#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
10pub(crate) enum Empty {}
11
12#[derive(Debug, Error)]
14pub enum NetworkError {
15 #[error("i/o error: {0}")]
17 Io(#[from] io::Error),
18
19 #[error("error binding to address {0}: {1}")]
21 Bind(NetAddr, #[source] io::Error),
22
23 #[error("invalid frame header: {0}")]
25 InvalidFrameHeader(#[from] InvalidHeader),
26
27 #[error("invalid message trailer")]
29 InvalidTrailer,
30
31 #[error("invalid ack frame")]
33 InvalidAck,
34
35 #[error("invalid hello frame")]
37 InvalidHello,
38
39 #[error("unknown frame type: {0}")]
41 UnknownFrameType(u8),
42
43 #[error("version negotiation failed, ours = {ours:?}, theirs = {theirs:?}")]
45 IncompatibleVersions {
46 ours: (Version, Version),
47 theirs: (Version, Version),
48 },
49
50 #[error("noise error: {0}")]
52 Noise(#[from] snow::Error),
53
54 #[error("invalid handshake message")]
56 InvalidHandshakeMessage,
57
58 #[error("message too large")]
60 MessageTooLarge,
61
62 #[error("channel closed")]
64 ChannelClosed,
65
66 #[error("receive budget closed")]
68 BudgetClosed,
69
70 #[error("timeout")]
72 Timeout,
73
74 #[error("peer process interrupted")]
76 PeerInterrupt,
77
78 #[error("too many pending acks for peer {0}")]
81 TooManyPendingAcks(PublicKey),
82}