1use std::io;
2
3use thiserror::Error;
4
5use crate::{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("incompatible versions")]
45 IncompatibleVersions,
46
47 #[error("noise error: {0}")]
49 Noise(#[from] snow::Error),
50
51 #[error("invalid handshake message")]
53 InvalidHandshakeMessage,
54
55 #[error("message too large")]
57 MessageTooLarge,
58
59 #[error("channel closed")]
61 ChannelClosed,
62
63 #[error("receive budget closed")]
65 BudgetClosed,
66
67 #[error("timeout")]
69 Timeout,
70
71 #[error("peer process interrupted")]
73 PeerInterrupt,
74
75 #[error("too many pending acks for peer {0}")]
78 TooManyPendingAcks(PublicKey),
79}