1use thiserror::Error;
4
5#[derive(Error, Debug)]
6pub enum Error {
7 #[error("IO error: {0}")]
8 Io(#[from] std::io::Error),
9
10 #[error("JSON error: {0}")]
11 Json(#[from] serde_json::Error),
12
13 #[error("Archive error: {0}")]
14 Archive(String),
15
16 #[error("Package not found: {0}")]
17 PackageNotFound(String),
18
19 #[error("Link failed: {0}")]
20 LinkFailed(String),
21
22 #[error("Invalid bottle format: {0}")]
23 InvalidBottle(String),
24
25 #[error("Build failed: {0}")]
26 Build(#[from] BuildError),
27
28 #[error("Bottle creation failed: {0}")]
29 Bottle(String),
30
31 #[error("Checksum mismatch: expected {expected}, got {actual}")]
32 ChecksumMismatch { expected: String, actual: String },
33
34 #[error("{0}")]
35 Other(String),
36}
37
38#[derive(Error, Debug)]
40pub enum BuildError {
41 #[error("configure script failed for {package}")]
42 ConfigureFailed { package: String },
43
44 #[error("configure script not found for {package}")]
45 ConfigureNotFound { package: String },
46
47 #[error("make failed for {package}")]
48 MakeFailed { package: String },
49
50 #[error("make install failed for {package}")]
51 MakeInstallFailed { package: String },
52
53 #[error("cmake configure failed for {package}")]
54 CmakeConfigureFailed { package: String },
55
56 #[error("cmake build failed for {package}")]
57 CmakeBuildFailed { package: String },
58
59 #[error("cmake install failed for {package}")]
60 CmakeInstallFailed { package: String },
61
62 #[error("meson configure failed for {package}")]
63 MesonConfigureFailed { package: String },
64
65 #[error("meson build failed for {package}")]
66 MesonBuildFailed { package: String },
67
68 #[error("cargo build failed for {package}")]
69 CargoBuildFailed { package: String },
70
71 #[error("meson compile failed for {package}")]
72 MesonCompileFailed { package: String },
73
74 #[error("meson install failed for {package}")]
75 MesonInstallFailed { package: String },
76
77 #[error("unknown build system for {package}")]
78 UnknownBuildSystem { package: String },
79
80 #[error("download failed for {package}: {reason}")]
81 DownloadFailed { package: String, reason: String },
82
83 #[error("extraction failed for {package}: {reason}")]
84 ExtractionFailed { package: String, reason: String },
85
86 #[error("source directory not found for {package}")]
87 SourceDirectoryNotFound { package: String },
88
89 #[error("compiler validation failed: {reason}")]
90 CompilerValidationFailed { reason: String },
91}
92
93impl BuildError {
94 pub fn configure_failed(package: &str) -> Self {
96 BuildError::ConfigureFailed {
97 package: package.to_string(),
98 }
99 }
100
101 pub fn make_failed(package: &str) -> Self {
103 BuildError::MakeFailed {
104 package: package.to_string(),
105 }
106 }
107
108 pub fn make_install_failed(package: &str) -> Self {
110 BuildError::MakeInstallFailed {
111 package: package.to_string(),
112 }
113 }
114
115 pub fn unknown_build_system(package: &str) -> Self {
117 BuildError::UnknownBuildSystem {
118 package: package.to_string(),
119 }
120 }
121}
122
123pub type Result<T> = std::result::Result<T, Error>;