1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum CleanerError {
8 #[error("cleaning failed: {0}")]
10 CleaningFailed(String),
11
12 #[error("file not found: {file_number}")]
14 FileNotFound {
15 file_number: u32,
17 },
18
19 #[error("utilization tracking error: {0}")]
21 UtilizationError(String),
22
23 #[error("io error: {0}")]
25 IoError(#[from] std::io::Error),
26}
27
28pub type Result<T> = std::result::Result<T, CleanerError>;
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn test_error_display() {
37 let err = CleanerError::CleaningFailed("test error".to_string());
38 assert_eq!(err.to_string(), "cleaning failed: test error");
39 }
40
41 #[test]
42 fn test_file_not_found() {
43 let err = CleanerError::FileNotFound { file_number: 42 };
44 assert_eq!(err.to_string(), "file not found: 42");
45 }
46
47 #[test]
48 fn test_utilization_error() {
49 let err = CleanerError::UtilizationError("tracking failed".to_string());
50 assert_eq!(
51 err.to_string(),
52 "utilization tracking error: tracking failed"
53 );
54 }
55
56 #[test]
57 fn test_io_error_conversion() {
58 let io_err =
59 std::io::Error::new(std::io::ErrorKind::NotFound, "file missing");
60 let err: CleanerError = io_err.into();
61 assert!(matches!(err, CleanerError::IoError(_)));
62 }
63}