1use thiserror::Error;
2
3#[derive(Error, Debug)]
4pub enum GraphyError {
5 #[error("IO error: {0}")]
6 Io(#[from] std::io::Error),
7
8 #[error("Storage error: {0}")]
9 Storage(String),
10}
11
12#[cfg(test)]
13mod tests {
14 use super::*;
15
16 #[test]
17 fn io_error_display() {
18 let io_err = std::io::Error::new(std::io::ErrorKind::NotFound, "file not found");
19 let err: GraphyError = io_err.into();
20 let msg = format!("{}", err);
21 assert!(msg.contains("IO error"));
22 assert!(msg.contains("file not found"));
23 }
24
25 #[test]
26 fn storage_error_display() {
27 let err = GraphyError::Storage("corrupt database".to_string());
28 let msg = format!("{}", err);
29 assert!(msg.contains("Storage error"));
30 assert!(msg.contains("corrupt database"));
31 }
32
33 #[test]
34 fn io_error_from_conversion() {
35 let io_err = std::io::Error::new(std::io::ErrorKind::PermissionDenied, "access denied");
36 let err = GraphyError::from(io_err);
37 assert!(matches!(err, GraphyError::Io(_)));
38 }
39
40 #[test]
41 fn storage_error_empty_message() {
42 let err = GraphyError::Storage(String::new());
43 assert_eq!(format!("{}", err), "Storage error: ");
44 }
45}