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>;