1#[derive(Debug, thiserror::Error)]
7pub enum AdkError {
8 #[error("Agent error: {0}")]
10 Agent(String),
11
12 #[error("Model error: {0}")]
14 Model(String),
15
16 #[error("Tool error: {0}")]
18 Tool(String),
19
20 #[error("Session error: {0}")]
22 Session(String),
23
24 #[error("Artifact error: {0}")]
26 Artifact(String),
27
28 #[error("Memory error: {0}")]
30 Memory(String),
31
32 #[error("Configuration error: {0}")]
34 Config(String),
35
36 #[error("IO error: {0}")]
38 Io(#[from] std::io::Error),
39
40 #[error("Serialization error: {0}")]
42 Serde(#[from] serde_json::Error),
43}
44
45pub type Result<T> = std::result::Result<T, AdkError>;
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn test_error_display() {
54 let err = AdkError::Agent("test error".to_string());
55 assert_eq!(err.to_string(), "Agent error: test error");
56 }
57
58 #[test]
59 fn test_error_from_io() {
60 let io_err = std::io::Error::new(std::io::ErrorKind::NotFound, "file not found");
61 let adk_err: AdkError = io_err.into();
62 assert!(matches!(adk_err, AdkError::Io(_)));
63 }
64
65 #[test]
66 #[allow(clippy::unnecessary_literal_unwrap)]
67 fn test_result_type() {
68 let ok_result: Result<i32> = Ok(42);
69 assert_eq!(ok_result.unwrap(), 42);
70
71 let err_result: Result<i32> = Err(AdkError::Config("invalid".to_string()));
72 assert!(err_result.is_err());
73 }
74}