use thiserror::Error;
#[derive(Error, Debug)]
pub enum ScraperError {
#[cfg(feature = "jsonpath")]
#[error(transparent)]
JsonPathError(#[from] jsonpath_lib::JsonPathError),
#[cfg(feature = "jsonpath")]
#[error("jsonpath match error:{0}")]
JsonPathMatchError(String),
#[cfg(feature = "jsonpath")]
#[error(transparent)]
JsonDeserializeError(#[from] serde_json::Error),
#[cfg(feature = "css_selector")]
#[error("css selector error: {0}")]
CssSelectorError(String),
#[cfg(feature = "css_selector")]
#[error("css selector match error:{0}")]
CssSelectorMatchError(String),
#[cfg(feature = "xpath")]
#[error(transparent)]
HtmlParseError(#[from] libxml::parser::XmlParseError),
#[cfg(feature = "xpath")]
#[error("{0}")]
XPathError(String),
#[error(transparent)]
IOError(#[from] reqwest::Error),
#[error("http request for \"{0}\" error code:{1}, body text:{2}")]
HttpError(String, u16, String),
}
#[cfg(feature = "css_selector")]
impl<'a> From<scraper::error::SelectorErrorKind<'a>> for ScraperError {
fn from(value: scraper::error::SelectorErrorKind<'a>) -> Self {
Self::CssSelectorError(value.to_string())
}
}
pub type Result<T> = std::result::Result<T, ScraperError>;