gosh_lan_transfer/
error.rs

1// SPDX-License-Identifier: MIT
2// gosh-lan-transfer - Error types for the engine
3
4use thiserror::Error;
5
6/// Error types for the transfer engine
7#[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
46/// Result alias for engine operations
47pub 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}