pith/
errors.rs

1//! Error types for Pith.
2
3use std::path::PathBuf;
4
5use crate::codemap::CodemapError;
6use crate::filter::FilterError;
7use crate::output::OutputError;
8use crate::walker::WalkError;
9
10/// Top-level error type for Pith operations.
11#[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
38/// Map an error to its exit code.
39pub 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}