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}