1use std::sync::Arc;
2
3use thiserror::Error;
4
5#[derive(Error, Debug, Clone)]
6pub enum SpsError {
7 #[error("I/O Error: {0}")]
8 Io(#[from] Arc<std::io::Error>),
9
10 #[error("HTTP Request Error: {0}")]
11 Http(#[from] Arc<reqwest::Error>),
12
13 #[error("JSON Parsing Error: {0}")]
14 Json(#[from] Arc<serde_json::Error>),
15
16 #[error("Semantic Versioning Error: {0}")]
17 SemVer(#[from] Arc<semver::Error>),
18
19 #[error("Object File Error: {0}")]
20 Object(#[from] Arc<object::read::Error>),
21
22 #[error("Configuration Error: {0}")]
23 Config(String),
24
25 #[error("API Error: {0}")]
26 Api(String),
27
28 #[error("API Request Error: {0}")]
29 ApiRequestError(String),
30
31 #[error("DownloadError: Failed to download '{0}' from '{1}': {2}")]
32 DownloadError(String, String, String),
33
34 #[error("Cache Error: {0}")]
35 Cache(String),
36
37 #[error("Resource Not Found: {0}")]
38 NotFound(String),
39
40 #[error("Installation Error: {0}")]
41 InstallError(String),
42
43 #[error("Generic Error: {0}")]
44 Generic(String),
45
46 #[error("HttpError: {0}")]
47 HttpError(String),
48
49 #[error("Checksum Mismatch: {0}")]
50 ChecksumMismatch(String),
51
52 #[error("Validation Error: {0}")]
53 ValidationError(String),
54
55 #[error("Checksum Error: {0}")]
56 ChecksumError(String),
57
58 #[error("Parsing Error in {0}: {1}")]
59 ParseError(&'static str, String),
60
61 #[error("Version error: {0}")]
62 VersionError(String),
63
64 #[error("Dependency Error: {0}")]
65 DependencyError(String),
66
67 #[error("Build environment setup failed: {0}")]
68 BuildEnvError(String),
69
70 #[error("IoError: {0}")]
71 IoError(String),
72
73 #[error("Failed to execute command: {0}")]
74 CommandExecError(String),
75
76 #[error("Mach-O Error: {0}")]
77 MachOError(String),
78
79 #[error("Mach-O Modification Error: {0}")]
80 MachOModificationError(String),
81
82 #[error("Mach-O Relocation Error: Path too long - {0}")]
83 PathTooLongError(String),
84
85 #[error("Codesign Error: {0}")]
86 CodesignError(String),
87}
88
89impl From<std::io::Error> for SpsError {
90 fn from(err: std::io::Error) -> Self {
91 SpsError::Io(Arc::new(err))
92 }
93}
94
95impl From<reqwest::Error> for SpsError {
96 fn from(err: reqwest::Error) -> Self {
97 SpsError::Http(Arc::new(err))
98 }
99}
100
101impl From<serde_json::Error> for SpsError {
102 fn from(err: serde_json::Error) -> Self {
103 SpsError::Json(Arc::new(err))
104 }
105}
106
107impl From<semver::Error> for SpsError {
108 fn from(err: semver::Error) -> Self {
109 SpsError::SemVer(Arc::new(err))
110 }
111}
112
113impl From<object::read::Error> for SpsError {
114 fn from(err: object::read::Error) -> Self {
115 SpsError::Object(Arc::new(err))
116 }
117}
118
119pub type Result<T> = std::result::Result<T, SpsError>;