use serde::{Deserialize, Serialize};
use crate::model::common::Versions;
use crate::types::StLoc;
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Ofd {
#[serde(rename = "@Version")]
pub version: String,
#[serde(rename = "@DocType")]
pub doc_type: String,
#[serde(rename = "DocBody")]
pub doc_bodies: Vec<DocBody>,
}
impl Ofd {
pub fn is_archive(&self) -> bool {
self.doc_type == "OFD-A"
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct DocBody {
#[serde(rename = "DocInfo")]
pub doc_info: CtDocInfo,
#[serde(rename = "DocRoot")]
pub doc_root: Option<StLoc>,
#[serde(rename = "Versions")]
pub versions: Option<Versions>,
#[serde(rename = "Signatures")]
pub signatures: Option<StLoc>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct CtDocInfo {
#[serde(rename = "DocID")]
pub doc_id: Option<String>,
#[serde(rename = "Title")]
pub title: Option<String>,
#[serde(rename = "Author")]
pub author: Option<String>,
#[serde(rename = "Subject")]
pub subject: Option<String>,
#[serde(rename = "Abstract")]
pub abstract_: Option<String>,
#[serde(rename = "CreationDate")]
pub creation_date: Option<String>,
#[serde(rename = "ModDate")]
pub mod_date: Option<String>,
#[serde(rename = "DocUsage")]
pub doc_usage: Option<String>,
#[serde(rename = "Cover")]
pub cover: Option<StLoc>,
#[serde(rename = "Keywords")]
pub keywords: Option<Keywords>,
#[serde(rename = "Creator")]
pub creator: Option<String>,
#[serde(rename = "CreatorVersion")]
pub creator_version: Option<String>,
#[serde(rename = "CustomDatas")]
pub custom_datas: Option<CustomDatas>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Keywords {
#[serde(rename = "Keyword", default)]
pub keywords: Vec<String>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct CustomDatas {
#[serde(rename = "CustomData", default)]
pub custom_datas: Vec<CustomData>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct CustomData {
#[serde(rename = "@Name")]
pub name: String,
#[serde(rename = "$text", default)]
pub value: String,
}