Skip to main content

astmap_core/
error.rs

1#[derive(Debug, thiserror::Error)]
2pub enum DbError {
3    #[error("database error: {0}")]
4    Storage(String),
5    #[error("database not found. Run 'astmap scan' first.")]
6    NotFound,
7    #[error("failed to create storage directory: {0}")]
8    CreateDir(std::io::Error),
9    #[error("format error: {0}")]
10    Fmt(#[from] std::fmt::Error),
11}
12
13#[derive(Debug, thiserror::Error)]
14pub enum DiffError {
15    #[error("VCS error: {0}")]
16    Vcs(String),
17    #[error("database error: {0}")]
18    Db(#[from] DbError),
19    #[error("not a git repository")]
20    NotGitRepo,
21}
22
23#[derive(Debug, thiserror::Error)]
24pub enum ScanError {
25    #[error("database error: {0}")]
26    Db(#[from] DbError),
27    #[error("IO error: {0}")]
28    Io(#[from] std::io::Error),
29    #[error("parser error: {0}")]
30    Parse(String),
31}
32
33#[cfg(test)]
34mod tests {
35    use super::*;
36
37    #[test]
38    fn test_db_error_display() {
39        let err = DbError::Storage("test error".to_string());
40        assert_eq!(format!("{}", err), "database error: test error");
41
42        let err = DbError::NotFound;
43        assert!(format!("{}", err).contains("not found"));
44
45        let io_err = std::io::Error::new(std::io::ErrorKind::PermissionDenied, "denied");
46        let err = DbError::CreateDir(io_err);
47        assert!(format!("{}", err).contains("denied"));
48    }
49}