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("peer fingerprint mismatch: expected {expected}, got {actual}")]
19    PeerFingerprintMismatch { expected: String, actual: String },
20
21    #[error("filesystem error at {}: {source}", path.display())]
22    IoPath {
23        path: PathBuf,
24        #[source]
25        source: std::io::Error,
26    },
27
28    #[error("filesystem error: {0}")]
29    Io(#[from] std::io::Error),
30
31    #[error("configuration directory is unavailable")]
32    ConfigDirUnavailable,
33
34    #[error("configuration parse failed: {0}")]
35    ConfigParse(String),
36
37    #[error("configuration serialization failed: {0}")]
38    ConfigSerialize(String),
39
40    #[error("mDNS discovery failed: {0}")]
41    Discovery(String),
42
43    #[error("certificate generation failed: {0}")]
44    CertificateGeneration(#[from] rcgen::Error),
45
46    #[error("TLS configuration failed: {0}")]
47    Tls(#[from] rustls::Error),
48
49    #[error("QUIC connection failed: {0}")]
50    Connect(#[from] quinn::ConnectError),
51
52    #[error("QUIC connection closed: {0}")]
53    Connection(#[from] quinn::ConnectionError),
54
55    #[error("QUIC read failed: {0}")]
56    Read(#[from] quinn::ReadError),
57
58    #[error("QUIC exact read failed: {0}")]
59    ReadExact(#[from] quinn::ReadExactError),
60
61    #[error("QUIC write failed: {0}")]
62    Write(#[from] quinn::WriteError),
63
64    #[error("QUIC stream is closed: {0}")]
65    ClosedStream(#[from] quinn::ClosedStream),
66
67    #[error("QUIC endpoint connection refused")]
68    NoIncomingConnection,
69
70    #[error("crypto configuration failed: {0}")]
71    CryptoConfig(String),
72
73    #[error("protocol error: {0}")]
74    Protocol(String),
75
76    #[error("authentication failed: {0}")]
77    Authentication(String),
78
79    #[error("transfer failed: {0}")]
80    Transfer(String),
81
82    #[error("transfer cancelled")]
83    TransferCancelled,
84
85    #[error("{0} is not implemented yet")]
86    NotImplemented(&'static str),
87}
88
89pub type Result<T> = std::result::Result<T, Error>;