gosh_lan_transfer/
error.rs1use thiserror::Error;
5
6#[derive(Debug, Error)]
8pub enum EngineError {
9 #[error("Network error: {0}")]
10 Network(String),
11
12 #[error("DNS resolution failed: {0}")]
13 DnsResolution(String),
14
15 #[error("Connection refused: {0}")]
16 ConnectionRefused(String),
17
18 #[error("Transfer rejected by peer")]
19 TransferRejected,
20
21 #[error("File I/O error: {0}")]
22 FileIo(String),
23
24 #[error("Serialization error: {0}")]
25 Serialization(String),
26
27 #[error("Server not running")]
28 ServerNotRunning,
29
30 #[error("Server already running")]
31 ServerAlreadyRunning,
32
33 #[error("Invalid configuration: {0}")]
34 InvalidConfig(String),
35
36 #[error("Transfer not found: {0}")]
37 TransferNotFound(String),
38
39 #[error("Transfer timed out")]
40 TransferTimeout,
41
42 #[error("Transfer cancelled")]
43 TransferCancelled,
44}
45
46pub type EngineResult<T> = Result<T, EngineError>;
48
49impl From<std::io::Error> for EngineError {
50 fn from(err: std::io::Error) -> Self {
51 EngineError::FileIo(err.to_string())
52 }
53}
54
55impl From<serde_json::Error> for EngineError {
56 fn from(err: serde_json::Error) -> Self {
57 EngineError::Serialization(err.to_string())
58 }
59}
60
61impl From<reqwest::Error> for EngineError {
62 fn from(err: reqwest::Error) -> Self {
63 if err.is_connect() {
64 EngineError::ConnectionRefused(err.to_string())
65 } else {
66 EngineError::Network(err.to_string())
67 }
68 }
69}