Skip to main content

ferry_core/
error.rs

1use std::net::AddrParseError;
2use std::path::PathBuf;
3
4#[derive(Debug, thiserror::Error)]
5pub enum Error {
6    #[error("invalid peer address: {0}")]
7    InvalidPeerAddress(#[from] AddrParseError),
8
9    #[error("invalid transfer input: {0}")]
10    InvalidInput(String),
11
12    #[error("peer not found: {0}")]
13    PeerNotFound(String),
14
15    #[error("peer lookup is ambiguous: {0}")]
16    AmbiguousPeer(String),
17
18    #[error("filesystem error at {}: {source}", path.display())]
19    IoPath {
20        path: PathBuf,
21        #[source]
22        source: std::io::Error,
23    },
24
25    #[error("filesystem error: {0}")]
26    Io(#[from] std::io::Error),
27
28    #[error("configuration directory is unavailable")]
29    ConfigDirUnavailable,
30
31    #[error("configuration parse failed: {0}")]
32    ConfigParse(String),
33
34    #[error("configuration serialization failed: {0}")]
35    ConfigSerialize(String),
36
37    #[error("mDNS discovery failed: {0}")]
38    Discovery(String),
39
40    #[error("certificate generation failed: {0}")]
41    CertificateGeneration(#[from] rcgen::Error),
42
43    #[error("TLS configuration failed: {0}")]
44    Tls(#[from] rustls::Error),
45
46    #[error("QUIC connection failed: {0}")]
47    Connect(#[from] quinn::ConnectError),
48
49    #[error("QUIC connection closed: {0}")]
50    Connection(#[from] quinn::ConnectionError),
51
52    #[error("QUIC read failed: {0}")]
53    Read(#[from] quinn::ReadError),
54
55    #[error("QUIC exact read failed: {0}")]
56    ReadExact(#[from] quinn::ReadExactError),
57
58    #[error("QUIC write failed: {0}")]
59    Write(#[from] quinn::WriteError),
60
61    #[error("QUIC stream is closed: {0}")]
62    ClosedStream(#[from] quinn::ClosedStream),
63
64    #[error("QUIC endpoint connection refused")]
65    NoIncomingConnection,
66
67    #[error("crypto configuration failed: {0}")]
68    CryptoConfig(String),
69
70    #[error("protocol error: {0}")]
71    Protocol(String),
72
73    #[error("transfer failed: {0}")]
74    Transfer(String),
75
76    #[error("{0} is not implemented yet")]
77    NotImplemented(&'static str),
78}
79
80pub type Result<T> = std::result::Result<T, Error>;