use thiserror::Error;
#[derive(Debug, Error)]
pub enum CleanerError {
#[error("cleaning failed: {0}")]
CleaningFailed(String),
#[error("file not found: {file_number}")]
FileNotFound {
file_number: u32,
},
#[error("utilization tracking error: {0}")]
UtilizationError(String),
#[error("io error: {0}")]
IoError(#[from] std::io::Error),
}
pub type Result<T> = std::result::Result<T, CleanerError>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_error_display() {
let err = CleanerError::CleaningFailed("test error".to_string());
assert_eq!(err.to_string(), "cleaning failed: test error");
}
#[test]
fn test_file_not_found() {
let err = CleanerError::FileNotFound { file_number: 42 };
assert_eq!(err.to_string(), "file not found: 42");
}
#[test]
fn test_utilization_error() {
let err = CleanerError::UtilizationError("tracking failed".to_string());
assert_eq!(
err.to_string(),
"utilization tracking error: tracking failed"
);
}
#[test]
fn test_io_error_conversion() {
let io_err =
std::io::Error::new(std::io::ErrorKind::NotFound, "file missing");
let err: CleanerError = io_err.into();
assert!(matches!(err, CleanerError::IoError(_)));
}
}