use serde::Serialize;
#[derive(Debug, Clone, Default)]
pub enum ContentExtraction {
#[default]
Full,
Selector(String),
Readable,
}
#[derive(Debug, Clone)]
pub struct ConvertConfig {
pub options: crate::options::Options,
pub gfm: bool,
pub extract_links: bool,
pub domain: Option<String>,
pub content: ContentExtraction,
}
#[derive(Debug, Clone, Default)]
pub struct ResponseMeta {
pub status_code: Option<u16>,
pub content_type: Option<String>,
}
#[derive(Debug, Serialize)]
#[non_exhaustive]
#[allow(clippy::module_name_repetitions)]
pub struct FetchResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status_code: Option<u16>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub og_image: Option<String>,
pub markdown: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<Vec<String>>,
pub elapsed_ms: u64,
pub content_length: usize,
}
#[derive(Debug, Serialize, thiserror::Error)]
#[error("{error}")]
#[non_exhaustive]
#[allow(clippy::module_name_repetitions)]
pub struct FetchError {
pub error: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
}
impl FetchError {
#[must_use]
pub fn new(error: impl Into<String>, url: Option<String>) -> Self {
Self {
error: error.into(),
url,
}
}
}