1#[derive(Debug, thiserror::Error)]
5pub enum KernexError {
6 #[error("provider error: {0}")]
8 Provider(String),
9
10 #[error("store error: {0}")]
12 Store(String),
13
14 #[error("sandbox error: {0}")]
16 Sandbox(String),
17
18 #[error("config error: {0}")]
20 Config(String),
21
22 #[error("pipeline error: {0}")]
24 Pipeline(String),
25
26 #[error("skill error: {0}")]
28 Skill(String),
29
30 #[error(transparent)]
32 Io(#[from] std::io::Error),
33
34 #[error(transparent)]
36 Serialization(#[from] serde_json::Error),
37}
38
39pub type Result<T> = std::result::Result<T, KernexError>;
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn test_io_error_display() {
47 let io_err = std::io::Error::new(std::io::ErrorKind::NotFound, "file missing");
48 let err = KernexError::from(io_err);
49 let display = format!("{err}");
50 assert!(display.contains("file missing"));
51 }
52
53 #[test]
54 fn test_provider_error_display() {
55 let err = KernexError::Provider("timeout".into());
56 assert_eq!(format!("{err}"), "provider error: timeout");
57 }
58
59 #[test]
60 fn test_config_error_display() {
61 let err = KernexError::Config("missing field".into());
62 assert_eq!(format!("{err}"), "config error: missing field");
63 }
64
65 #[test]
66 fn test_store_error_display() {
67 let err = KernexError::Store("connection failed".into());
68 assert_eq!(format!("{err}"), "store error: connection failed");
69 }
70}