1use thiserror::Error;
2
3#[derive(Error, Debug)]
4pub enum SpiderError {
5 #[error("Request error: {0}")]
6 ReqwestError(#[from] reqwest::Error),
7 #[error("URL parse error: {0}")]
8 UrlParseError(#[from] url::ParseError),
9 #[error("I/O error: {0}")]
10 IoError(#[from] std::io::Error),
11 #[error("HTTP error: {0}")]
12 HttpError(#[from] http::Error),
13 #[error("JSON serialization/deserialization error: {0}")]
14 SerdeJsonError(#[from] serde_json::Error),
15 #[error("HTML parsing error: {0}")]
16 HtmlParseError(String),
17 #[error("Tokio join error: {0}")]
18 TokioJoinError(#[from] tokio::task::JoinError),
19 #[error("Internal error: {0}")]
20 InternalError(String),
21 #[error("Channel send error: {0}")]
22 MpscSendError(String),
23 #[error("Message: {0}")]
24 Msg(String),
25 #[error("Header value error: {0}")]
26 HeaderValueError(String),
27 #[error("Other error: {0}")]
28 Other(String),
29}
30
31#[derive(Error, Debug)]
32pub enum PipelineError {
33 #[error("I/O error: {0}")]
34 IoError(#[from] std::io::Error),
35 #[error("Item processing error: {0}")]
36 ItemError(String),
37 #[cfg(feature = "pipeline-sqlite")]
38 #[error("Database error: {0}")]
39 DatabaseError(#[from] rusqlite::Error),
40 #[error("Serialization error: {0}")]
41 SerializationError(#[from] serde_json::Error),
42 #[cfg(feature = "pipeline-csv")]
43 #[error("CSV error: {0}")]
44 CsvError(#[from] csv::Error),
45 #[error("Other pipeline error: {0}")]
46 Other(String),
47}
48