qwencode_rs/types/
error.rs1use thiserror::Error;
2
3#[derive(Debug, Error)]
5pub enum SDKError {
6 #[error("Transport error: {0}")]
7 Transport(String),
8
9 #[error("Session error: {0}")]
10 Session(String),
11
12 #[error("Invalid configuration: {0}")]
13 InvalidConfig(String),
14
15 #[error("MCP error: {0}")]
16 Mcp(String),
17
18 #[error("Tool execution error: {0}")]
19 ToolExecution(String),
20
21 #[error(transparent)]
22 Other(#[from] anyhow::Error),
23}
24
25#[derive(Debug, Error)]
27#[error("Operation was aborted")]
28pub struct AbortError;
29
30impl Default for AbortError {
31 fn default() -> Self {
32 Self::new()
33 }
34}
35
36impl AbortError {
37 pub fn new() -> Self {
38 AbortError
39 }
40}
41
42impl PartialEq for AbortError {
43 fn eq(&self, _: &Self) -> bool {
44 true
45 }
46}
47
48pub fn is_abort_error(err: &anyhow::Error) -> bool {
50 err.downcast_ref::<AbortError>().is_some()
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 #[test]
58 fn test_abort_error_creation() {
59 let err = AbortError::new();
60 assert!(format!("{}", err).contains("aborted"));
61 }
62
63 #[test]
64 fn test_abort_error_equality() {
65 let err1 = AbortError::new();
66 let err2 = AbortError::new();
67 assert_eq!(err1, err2);
68 }
69
70 #[test]
71 fn test_is_abort_error_true() {
72 let _err: Box<dyn std::error::Error> = Box::new(AbortError::new());
73 }
76
77 #[test]
78 fn test_sdk_error_transport_variant() {
79 let err = SDKError::Transport("connection failed".to_string());
80 assert!(format!("{}", err).contains("Transport"));
81 assert!(format!("{}", err).contains("connection failed"));
82 }
83
84 #[test]
85 fn test_sdk_error_session_variant() {
86 let err = SDKError::Session("session closed".to_string());
87 assert!(format!("{}", err).contains("Session"));
88 assert!(format!("{}", err).contains("session closed"));
89 }
90
91 #[test]
92 fn test_sdk_error_invalid_config_variant() {
93 let err = SDKError::InvalidConfig("missing model".to_string());
94 assert!(format!("{}", err).contains("Invalid configuration"));
95 assert!(format!("{}", err).contains("missing model"));
96 }
97
98 #[test]
99 fn test_sdk_error_mcp_variant() {
100 let err = SDKError::Mcp("server unavailable".to_string());
101 assert!(format!("{}", err).contains("MCP"));
102 assert!(format!("{}", err).contains("server unavailable"));
103 }
104
105 #[test]
106 fn test_sdk_error_tool_execution_variant() {
107 let err = SDKError::ToolExecution("tool not found".to_string());
108 assert!(format!("{}", err).contains("Tool execution"));
109 assert!(format!("{}", err).contains("tool not found"));
110 }
111
112 #[test]
113 fn test_sdk_error_debug_format() {
114 let err = SDKError::Transport("test".to_string());
115 let debug_str = format!("{:?}", err);
116 assert!(debug_str.contains("Transport"));
117 }
118}