use thiserror::Error;
#[derive(Error, Debug)]
pub enum CrawlError {
#[error("HTTP 请求失败: {0}")]
Http(String),
#[error("URL 解析失败: {0}")]
Url(#[from] url::ParseError),
#[error("HTML 解析失败: {0}")]
Html(String),
#[error("回调执行出错: {0}")]
Callback(String),
#[error("IO 错误: {0}")]
Io(#[from] std::io::Error),
#[error("CSS 选择器解析失败 '{selector}': {message}")]
Selector { selector: String, message: String },
#[error("可读性提取失败: {0}")]
Readability(String),
#[error("配置错误: {0}")]
Config(String),
#[error("所有请求器均失败: {0}")]
AllFetchersFailed(String),
#[error("机器人验证页面: {0}")]
BotChallenge(String),
#[error("锁错误: {0}")]
Lock(String),
}
pub type Result<T> = std::result::Result<T, CrawlError>;