Skip to main content

noxu_cleaner/
error.rs

1//! Error types for the cleaner module.
2
3use thiserror::Error;
4
5/// Errors that can occur during log file cleaning operations.
6#[derive(Debug, Error)]
7pub enum CleanerError {
8    /// A cleaning operation failed.
9    #[error("cleaning failed: {0}")]
10    CleaningFailed(String),
11
12    /// A log file was not found.
13    #[error("file not found: {file_number}")]
14    FileNotFound {
15        /// The missing file number.
16        file_number: u32,
17    },
18
19    /// An error occurred during utilization tracking.
20    #[error("utilization tracking error: {0}")]
21    UtilizationError(String),
22
23    /// An I/O error occurred.
24    #[error("io error: {0}")]
25    IoError(#[from] std::io::Error),
26}
27
28/// Result type for cleaner operations.
29pub 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}