1use saorsa_ai::SaorsaAiError;
4
5#[derive(Debug, thiserror::Error)]
7pub enum SaorsaAgentError {
8 #[error("tool error: {0}")]
10 Tool(String),
11
12 #[error("session error: {0}")]
14 Session(String),
15
16 #[error("context error: {0}")]
18 Context(String),
19
20 #[error("provider error: {0}")]
22 Provider(#[from] SaorsaAiError),
23
24 #[error("cancelled: {0}")]
26 Cancelled(String),
27
28 #[error("I/O error: {0}")]
30 Io(#[from] std::io::Error),
31
32 #[error("JSON error: {0}")]
34 Json(#[from] serde_json::Error),
35
36 #[error("internal error: {0}")]
38 Internal(String),
39
40 #[error("extension error: {0}")]
42 Extension(String),
43}
44
45pub type Result<T> = std::result::Result<T, SaorsaAgentError>;
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn tool_error_display() {
54 let err = SaorsaAgentError::Tool("command failed".into());
55 assert_eq!(err.to_string(), "tool error: command failed");
56 }
57
58 #[test]
59 fn provider_error_converts() {
60 let ai_err = SaorsaAiError::Auth("bad key".into());
61 let err: SaorsaAgentError = ai_err.into();
62 assert!(matches!(err, SaorsaAgentError::Provider(_)));
63 }
64}