Skip to main content

crw_core/
error.rs

1use thiserror::Error;
2
3#[derive(Debug, Error)]
4pub enum CrwError {
5    #[error("HTTP request failed: {0}")]
6    HttpError(String),
7
8    #[error("Target unreachable: {0}")]
9    TargetUnreachable(String),
10
11    #[error("URL parse error: {0}")]
12    UrlParseError(#[from] url::ParseError),
13
14    #[error("Invalid request: {0}")]
15    InvalidRequest(String),
16
17    #[error("Renderer error: {0}")]
18    RendererError(String),
19
20    #[error("Extraction error: {0}")]
21    ExtractionError(String),
22
23    #[error("Crawl error: {0}")]
24    CrawlError(String),
25
26    #[error("Timeout after {0}ms")]
27    Timeout(u64),
28
29    #[error("Config error: {0}")]
30    ConfigError(String),
31
32    #[error("Not found: {0}")]
33    NotFound(String),
34
35    #[error("Rate limited")]
36    RateLimited,
37
38    #[error("{0}")]
39    SearchDisabled(String),
40
41    #[error("{0}")]
42    Internal(String),
43
44    #[error("Renderer pool shutting down")]
45    Shutdown,
46}
47
48impl CrwError {
49    /// Machine-readable error code for API consumers.
50    pub fn error_code(&self) -> &'static str {
51        match self {
52            CrwError::HttpError(_) => "http_error",
53            CrwError::TargetUnreachable(_) => "target_unreachable",
54            CrwError::UrlParseError(_) => "invalid_url",
55            CrwError::InvalidRequest(_) => "invalid_request",
56            CrwError::RendererError(_) => "renderer_error",
57            CrwError::ExtractionError(_) => "extraction_error",
58            CrwError::CrawlError(_) => "crawl_error",
59            CrwError::Timeout(_) => "timeout",
60            CrwError::ConfigError(_) => "config_error",
61            CrwError::NotFound(_) => "not_found",
62            CrwError::RateLimited => "rate_limited",
63            CrwError::SearchDisabled(_) => "search_disabled",
64            CrwError::Internal(_) => "internal_error",
65            CrwError::Shutdown => "shutdown",
66        }
67    }
68}
69
70pub type CrwResult<T> = Result<T, CrwError>;