use serde::{Deserialize, Serialize};
use crate::types::PageStructure;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "api", derive(utoipa::ToSchema))]
pub struct PdfMetadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub pdf_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub producer: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub is_encrypted: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub width: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub height: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_count: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub scanned_confidence: Option<f32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub scanned_pages: Option<Vec<u32>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub layout_gated_pages: Option<Vec<u32>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub layout_gate_reasons: Option<Vec<String>>,
}
#[cfg_attr(alef, alef(skip))]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PdfExtractionMetadata {
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub subject: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub authors: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub keywords: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub modified_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_by: Option<String>,
pub pdf_specific: PdfMetadata,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_structure: Option<PageStructure>,
}
#[cfg_attr(alef, alef(skip))]
#[cfg_attr(alef, alef(skip))]
#[derive(Debug, Clone, Default)]
pub struct CommonPdfMetadata {
pub title: Option<String>,
pub subject: Option<String>,
pub authors: Option<Vec<String>>,
pub keywords: Option<Vec<String>>,
pub created_at: Option<String>,
pub modified_at: Option<String>,
pub created_by: Option<String>,
}