1use std::path::PathBuf;
4
5use crate::codemap::CodemapError;
6use crate::filter::FilterError;
7use crate::output::OutputError;
8use crate::walker::WalkError;
9
10#[derive(Debug, thiserror::Error)]
12pub enum PithError {
13 #[error("path not found: {0}")]
14 PathNotFound(PathBuf),
15
16 #[error("permission denied: {0}")]
17 PermissionDenied(PathBuf),
18
19 #[error("no supported files found in {0}")]
20 NoFilesFound(PathBuf),
21
22 #[error("IO error: {0}")]
23 Io(#[from] std::io::Error),
24
25 #[error("walk error: {0}")]
26 Walk(#[from] WalkError),
27
28 #[error("filter error: {0}")]
29 Filter(#[from] FilterError),
30
31 #[error("codemap error: {0}")]
32 Codemap(#[from] CodemapError),
33
34 #[error("output error: {0}")]
35 Output(#[from] OutputError),
36}
37
38pub fn exit_code(error: &PithError) -> i32 {
40 match error {
41 PithError::PathNotFound(_) => 3,
42 PithError::PermissionDenied(_) => 4,
43 PithError::NoFilesFound(_) => 5,
44 PithError::Io(_) => 1,
45 PithError::Walk(_) => 2,
46 PithError::Filter(_) => 1,
47 PithError::Codemap(_) => 1,
48 PithError::Output(_) => 1,
49 }
50}