1use std::io;
2
3use hotshot_types::addr::NetAddr;
4use thiserror::Error;
5
6use crate::frame::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("unknown frame type: {0}")]
29 UnknownFrameType(u8),
30
31 #[error("noise error: {0}")]
33 Noise(#[from] snow::Error),
34
35 #[error("invalid handshake message")]
37 InvalidHandshakeMessage,
38
39 #[error("message too large")]
41 MessageTooLarge,
42
43 #[error("channel closed")]
45 ChannelClosed,
46
47 #[error("receive budget closed")]
49 BudgetClosed,
50
51 #[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}