1use serde::{Deserialize, Serialize};
7
8use crate::model::common::Versions;
9use crate::types::StLoc;
10
11#[derive(Debug, Clone, Deserialize, Serialize)]
13pub struct Ofd {
14 #[serde(rename = "@Version")]
16 pub version: String,
17 #[serde(rename = "@DocType")]
19 pub doc_type: String,
20 #[serde(rename = "DocBody")]
22 pub doc_bodies: Vec<DocBody>,
23}
24
25impl Ofd {
26 pub fn is_archive(&self) -> bool {
28 self.doc_type == "OFD-A"
29 }
30}
31
32#[derive(Debug, Clone, Deserialize, Serialize)]
34pub struct DocBody {
35 #[serde(rename = "DocInfo")]
37 pub doc_info: CtDocInfo,
38 #[serde(rename = "DocRoot")]
40 pub doc_root: Option<StLoc>,
41 #[serde(rename = "Versions")]
43 pub versions: Option<Versions>,
44 #[serde(rename = "Signatures")]
46 pub signatures: Option<StLoc>,
47}
48
49#[derive(Debug, Clone, Default, Deserialize, Serialize)]
51pub struct CtDocInfo {
52 #[serde(rename = "DocID")]
54 pub doc_id: Option<String>,
55 #[serde(rename = "Title")]
57 pub title: Option<String>,
58 #[serde(rename = "Author")]
60 pub author: Option<String>,
61 #[serde(rename = "Subject")]
63 pub subject: Option<String>,
64 #[serde(rename = "Abstract")]
66 pub abstract_: Option<String>,
67 #[serde(rename = "CreationDate")]
69 pub creation_date: Option<String>,
70 #[serde(rename = "ModDate")]
72 pub mod_date: Option<String>,
73 #[serde(rename = "DocUsage")]
75 pub doc_usage: Option<String>,
76 #[serde(rename = "Cover")]
78 pub cover: Option<StLoc>,
79 #[serde(rename = "Keywords")]
81 pub keywords: Option<Keywords>,
82 #[serde(rename = "Creator")]
84 pub creator: Option<String>,
85 #[serde(rename = "CreatorVersion")]
87 pub creator_version: Option<String>,
88 #[serde(rename = "CustomDatas")]
90 pub custom_datas: Option<CustomDatas>,
91}
92
93#[derive(Debug, Clone, Default, Deserialize, Serialize)]
95pub struct Keywords {
96 #[serde(rename = "Keyword", default)]
98 pub keywords: Vec<String>,
99}
100
101#[derive(Debug, Clone, Default, Deserialize, Serialize)]
103pub struct CustomDatas {
104 #[serde(rename = "CustomData", default)]
106 pub custom_datas: Vec<CustomData>,
107}
108
109#[derive(Debug, Clone, Default, Deserialize, Serialize)]
111pub struct CustomData {
112 #[serde(rename = "@Name")]
114 pub name: String,
115 #[serde(rename = "$text", default)]
117 pub value: String,
118}