Skip to main content

xz_search/
error.rs

1use std::fmt::Debug;
2
3/// 搜索错误
4#[derive(Debug, thiserror::Error)]
5pub enum SearchError {
6    #[error("API 错误 [{engine}]: {message}")]
7    Api { engine: String, message: String },
8
9    #[error("网络错误 [{engine}]: {message}")]
10    Network { engine: String, message: String },
11
12    #[error("速率限制 [{engine}]: {retry_after_ms}ms 后重试")]
13    RateLimit { engine: String, retry_after_ms: u64 },
14
15    #[error("内容提取失败 [{url}]: {message}")]
16    Extraction { url: String, message: String },
17
18    #[error("配置错误: {0}")]
19    Config(String),
20
21    #[error("查询重写失败: {0}")]
22    QueryRewrite(String),
23
24    #[error("引擎不可用: {0}")]
25    EngineUnavailable(String),
26
27    #[error("所有引擎均失败")]
28    AllEnginesFailed,
29
30    #[error("超时 ({0}ms)")]
31    Timeout(u64),
32
33    #[error("认证失败 [{engine}]: {message}")]
34    Auth { engine: String, message: String },
35
36    #[error("无效 URL: {0}")]
37    InvalidUrl(String),
38}
39
40impl SearchError {
41    pub fn is_retryable(&self) -> bool {
42        matches!(
43            self,
44            SearchError::Network { .. } | SearchError::RateLimit { .. } | SearchError::Timeout(_)
45        )
46    }
47}