use serde::{Deserialize, Serialize};
use super::common::{AxgfDate, BaseEntity, Extra};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct DocumentFile {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub size_bytes: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sha256: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentLinkedTo {
pub entity_type: String,
pub entity_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct DocumentOcr {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub confidence: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub engine: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentSuggestedLink {
pub entity_type: String,
pub entity_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub confidence: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct DocumentAi {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub suggested_links: Vec<DocumentSuggestedLink>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Document {
#[serde(flatten)]
pub base: BaseEntity,
pub filename: String,
pub mime_type: String,
pub document_type: String,
pub status: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub file: Option<DocumentFile>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub date: Option<AxgfDate>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub place_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub linked_to: Vec<DocumentLinkedTo>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ocr: Option<DocumentOcr>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ai: Option<DocumentAi>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub caption: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}