use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ArticleMetadata {
pub published_time: Option<String>,
pub modified_time: Option<String>,
pub author: Option<String>,
pub section: Option<String>,
pub tags: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct HreflangEntry {
pub lang: String,
pub url: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct FaviconInfo {
pub url: String,
pub rel: String,
pub sizes: Option<String>,
pub mime_type: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct HeadingInfo {
pub level: u8,
pub text: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ResponseMeta {
pub etag: Option<String>,
pub last_modified: Option<String>,
pub cache_control: Option<String>,
pub server: Option<String>,
pub x_powered_by: Option<String>,
pub content_language: Option<String>,
pub content_encoding: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct PageMetadata {
pub title: Option<String>,
pub description: Option<String>,
pub canonical_url: Option<String>,
pub keywords: Option<String>,
pub author: Option<String>,
pub viewport: Option<String>,
pub theme_color: Option<String>,
pub generator: Option<String>,
pub robots: Option<String>,
pub html_lang: Option<String>,
pub html_dir: Option<String>,
pub og_title: Option<String>,
pub og_type: Option<String>,
pub og_image: Option<String>,
pub og_description: Option<String>,
pub og_url: Option<String>,
pub og_site_name: Option<String>,
pub og_locale: Option<String>,
pub og_video: Option<String>,
pub og_audio: Option<String>,
pub og_locale_alternates: Option<Vec<String>>,
pub twitter_card: Option<String>,
pub twitter_title: Option<String>,
pub twitter_description: Option<String>,
pub twitter_image: Option<String>,
pub twitter_site: Option<String>,
pub twitter_creator: Option<String>,
pub dc_title: Option<String>,
pub dc_creator: Option<String>,
pub dc_subject: Option<String>,
pub dc_description: Option<String>,
pub dc_publisher: Option<String>,
pub dc_date: Option<String>,
pub dc_type: Option<String>,
pub dc_format: Option<String>,
pub dc_identifier: Option<String>,
pub dc_language: Option<String>,
pub dc_rights: Option<String>,
pub article: Option<ArticleMetadata>,
pub hreflangs: Option<Vec<HreflangEntry>>,
pub favicons: Option<Vec<FaviconInfo>>,
pub headings: Option<Vec<HeadingInfo>>,
pub word_count: Option<usize>,
}