1crate::ix!();
3
4error_tree!{
5
6 #[derive(Clone)]
7 pub enum CargoTomlWriteError {
8 WriteWorkspaceHeaderError {
9 io: Arc<io::Error>,
10 },
11 OpenWorkspaceMembersFieldError {
12 io: Arc<io::Error>,
13 },
14 WritePackageSectionError {
15 io: Arc<io::Error>,
16 },
17 WriteWorkspaceMember {
18 io: Arc<io::Error>,
19 },
20 CloseWorkspaceMembersFieldError {
21 io: Arc<io::Error>,
22 },
23 WriteError {
24 io: Arc<io::Error>,
25 cargo_toml_file: PathBuf,
26 },
27 }
28
29 #[derive(Clone)]
30 pub enum CargoTomlError {
31 ReadError {
32 io: Arc<io::Error>,
33 },
34 CargoTomlWriteError(CargoTomlWriteError),
35 MissingRequiredFieldForPublishing {
36 cargo_toml_file: PathBuf,
37 field: String,
38 },
39 MissingRequiredFieldForIntegrity {
40 cargo_toml_file: PathBuf,
41 field: String,
42 },
43 InvalidVersionFormat {
44 cargo_toml_file: PathBuf,
45 version: String,
46 },
47 MissingPackageSection {
48 cargo_toml_file: PathBuf,
49 },
50 TomlParseError {
51 cargo_toml_file: PathBuf,
52 toml_parse_error: toml::de::Error,
53 },
54 TomlEditError {
55 cargo_toml_file: PathBuf,
56 toml_parse_error: toml_edit::TomlError,
57 },
58
59 FileNotFound {
61 missing_file: PathBuf,
62 },
63
64 FileIsNotAFile {
65 invalid_path: PathBuf,
66 },
67 }
68
69 #[derive(Clone)]
70 pub enum TestFailure {
71 UnknownError {
72 stdout: Option<String>,
73 stderr: Option<String>,
74 }
75 }
76
77 #[derive(Clone)]
78 pub enum TokioError {
79 JoinError {
80 join_error: Arc<tokio::task::JoinError>,
81 },
82 }
83
84 #[derive(Clone)]
85 pub enum DirectoryError {
86 CreateDirAllError {
87 io: Arc<io::Error>,
88 },
89 ReadDirError {
90 io: Arc<io::Error>,
91 },
92 GetNextEntryError {
93 io: Arc<io::Error>,
94 },
95 }
96
97 #[derive(Clone)]
98 pub enum ReadmeWriteError {
99 WriteBlankReadmeError {
100 io: Arc<io::Error>,
101 },
102 }
103
104 #[derive(Clone)]
105 pub enum CrateWriteError {
106 ReadmeWriteError(ReadmeWriteError),
107 WriteDummyMainError {
108 io: Arc<io::Error>,
109 },
110 WriteDummyTestError {
111 io: Arc<io::Error>,
112 },
113 WriteLibRsFileError {
114 io: Arc<io::Error>,
115 },
116 WriteMainFnError {
117 io: Arc<io::Error>,
118 },
119 }
120
121 #[derive(Clone)]
122 pub enum TestCoverageError {
123 TestFailure {
124 stdout: Option<String>,
125 stderr: Option<String>,
126 },
127 UnknownError {
128 stdout: Option<String>,
129 stderr: Option<String>,
130 },
131 CoverageParseError,
132 CommandError {
133 io: Arc<io::Error>,
134 },
135 }
136
137 #[derive(Clone)]
138 pub enum CargoDocError {
139 CommandError {
140 io: Arc<io::Error>,
141 },
142 UnknownError {
143 stdout: Option<String>,
144 stderr: Option<String>,
145 }
146 }
147
148 #[derive(Clone)]
149 pub enum LintingError {
150 CommandError {
151 io: Arc<io::Error>,
152 },
153 UnknownError {
154 stdout: Option<String>,
155 stderr: Option<String>,
156 }
157 }
158
159 #[derive(Clone)]
160 pub enum CargoMetadataError {
161 MetadataError {
162 error: Arc<cargo_metadata::Error>,
163 },
164 CircularDependency,
165 CyclicPackageDependency,
166 }
167
168 #[derive(Clone)]
169 pub enum BuildError {
170 CommandError {
171 io: Arc<io::Error>,
172 },
173 BuildFailed {
174 stderr: String,
175 },
176 }
177}
178
179error_tree!{
180
181 #[derive(Clone)]
182 pub enum CrateError {
183 FileNotFound {
185 missing_file: PathBuf,
186 },
187
188 DirectoryNotFound {
190 missing_directory: PathBuf,
191 },
192
193 FailedToGetFileNameForPath {
194 path: PathBuf,
195 },
196
197 DirectoryError(DirectoryError),
198 CargoTomlError(CargoTomlError),
199
200 IoError {
201 io_error: Arc<io::Error>,
202 },
203 }
204}
205
206error_tree!{
207
208 #[derive(Clone)]
209 pub enum WatchError {
210 NotifyError(Arc<notify::Error>),
211 IoError {
212 io: Arc<io::Error>,
213 },
214 ChannelRecvError(std::sync::mpsc::RecvError),
215 }
216
217 #[derive(Clone)]
218 pub enum WorkspaceGitError {
219 FailedToRunGitStatusMakeSureGitIsInstalled,
220 WorkingDirectoryIsNotCleanAborting,
221 IoError {
222 io: Arc<io::Error>,
223 }
224 }
225
226 #[derive(Clone)]
228 pub enum WorkspaceError {
229 WorkspaceGitError(WorkspaceGitError),
230 CrateError(CrateError),
231 CratePinFailed {
232 crate_path: PathBuf,
233 source: Box<CrateError>,
234 },
235
236 TokioJoinError {
237 join_error: Arc<tokio::task::JoinError>,
238 },
239 IoError {
240 io_error: Arc<io::Error>,
241 context: String,
242 },
243 InvalidLockfile {
244 path: PathBuf,
245 message: String,
246 },
247
248 FileNotFound {
250 missing_file: PathBuf,
251 },
252
253 InvalidWorkspace {
254 invalid_workspace_path: PathBuf,
255 },
256
257 CargoDocError(CargoDocError),
258 CrateWriteError(CrateWriteError),
259 ReadmeWriteError(ReadmeWriteError),
260 TokioError(TokioError),
261 CargoMetadataError(CargoMetadataError),
262 CircularDependency {
263 detected_cycles: Vec<Vec<String>>,
265 },
266 CoverageParseError,
267 DirectoryRemovalError,
268 FileRemovalError,
269 InvalidCargoToml(CargoTomlError),
270 CargoTomlWriteError(CargoTomlWriteError),
271 LintingError(LintingError),
272 MultipleErrors(Vec<WorkspaceError>),
273 TestCoverageError(TestCoverageError),
274 TestFailure(TestFailure),
275 WatchError(WatchError),
276 BuildError(BuildError),
277 FileError(FileError),
278 DirectoryError(DirectoryError),
279 WorkspaceNotReadyForCargoPublish,
280 FileWatchError,
281 TestTimeout,
282 }
283}
284
285impl From<tokio::task::JoinError> for WorkspaceError {
286 fn from(join_error: tokio::task::JoinError) -> Self {
287 WorkspaceError::TokioJoinError {
288 join_error: Arc::new(join_error),
289 }
290 }
291}
292
293impl From<io::Error> for WorkspaceError {
294 fn from(io_error: io::Error) -> Self {
295 WorkspaceError::IoError {
296 io_error: Arc::new(io_error),
297 context: "no explicit context".to_string()
298 }
299 }
300}
301
302impl fmt::Display for WorkspaceError {
303 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
304 write!(f, "{:#?}", self)
305 }
306}
307
308impl CargoMetadataError {
309
310 pub fn is_cyclic_package_dependency_error(&self) -> bool {
311 self.to_string().contains("cyclic package dependency")
312 }
313}
314
315impl fmt::Display for CargoMetadataError {
316 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
317 write!(f, "{:#?}", self)
318 }
319}