1use serde::{Deserialize, Serialize};
8
9use crate::model::common::Actions;
10use crate::model::common::CtDest;
11use crate::model::page::{CtTemplatePage, Pages};
12use crate::types::{StBox, StId, StLoc, StRefId};
13
14#[derive(Debug, Clone, Deserialize, Serialize)]
16pub struct Document {
17 #[serde(rename = "CommonData")]
19 pub common_data: CommonData,
20 #[serde(rename = "Pages")]
22 pub pages: Pages,
23 #[serde(rename = "Outlines")]
25 pub outlines: Option<Outlines>,
26 #[serde(rename = "Permissions")]
28 pub permissions: Option<CtPermission>,
29 #[serde(rename = "Actions")]
31 pub actions: Option<Actions>,
32 #[serde(rename = "VPreferences")]
34 pub v_preferences: Option<VPreferences>,
35 #[serde(rename = "Bookmarks")]
37 pub bookmarks: Option<Bookmarks>,
38 #[serde(rename = "Attachments")]
40 pub attachments: Option<StLoc>,
41 #[serde(rename = "Annotations")]
43 pub annotations: Option<StLoc>,
44 #[serde(rename = "CustomTags")]
46 pub custom_tags: Option<StLoc>,
47 #[serde(rename = "Extensions")]
49 pub extensions: Option<StLoc>,
50}
51
52#[derive(Debug, Clone, Deserialize, Serialize)]
54pub struct CommonData {
55 #[serde(rename = "MaxUnitID")]
57 pub max_unit_id: StId,
58 #[serde(rename = "PageArea")]
60 pub page_area: CtPageArea,
61 #[serde(rename = "PublicRes", default)]
63 pub public_res: Vec<StLoc>,
64 #[serde(rename = "DocumentRes", default)]
66 pub document_res: Vec<StLoc>,
67 #[serde(rename = "TemplatePage", default)]
69 pub template_pages: Vec<CtTemplatePage>,
70 #[serde(rename = "DefaultCS")]
72 pub default_cs: Option<StRefId>,
73}
74
75#[derive(Debug, Clone, Deserialize, Serialize)]
79pub struct CtPageArea {
80 #[serde(rename = "PhysicalBox")]
82 pub physical_box: StBox,
83 #[serde(rename = "ApplicationBox")]
85 pub application_box: Option<StBox>,
86 #[serde(rename = "ContentBox")]
88 pub content_box: Option<StBox>,
89 #[serde(rename = "BleedBox")]
91 pub bleed_box: Option<StBox>,
92}
93
94#[derive(Debug, Clone, Default, Deserialize, Serialize)]
99pub struct CtPermission {
100 #[serde(rename = "Edit")]
102 pub edit: Option<bool>,
103 #[serde(rename = "Annot")]
105 pub annot: Option<bool>,
106 #[serde(rename = "Export")]
108 pub export: Option<bool>,
109 #[serde(rename = "Signature")]
111 pub signature: Option<bool>,
112 #[serde(rename = "Watermark")]
114 pub watermark: Option<bool>,
115 #[serde(rename = "PrintScreen")]
117 pub print_screen: Option<bool>,
118 #[serde(rename = "Print")]
120 pub print: Option<Print>,
121 #[serde(rename = "ValidPeriod")]
123 pub valid_period: Option<ValidPeriod>,
124}
125
126#[derive(Debug, Clone, Default, Deserialize, Serialize)]
128pub struct Print {
129 #[serde(rename = "@Printable")]
131 pub printable: Option<bool>,
132 #[serde(rename = "@Copies")]
134 pub copies: Option<i64>,
135}
136
137#[derive(Debug, Clone, Default, Deserialize, Serialize)]
139pub struct ValidPeriod {
140 #[serde(rename = "@StartDate")]
142 pub start_date: Option<String>,
143 #[serde(rename = "@EndDate")]
145 pub end_date: Option<String>,
146}
147
148#[derive(Debug, Clone, Default, Deserialize, Serialize)]
150pub struct VPreferences {
151 #[serde(rename = "PageMode")]
153 pub page_mode: Option<String>,
154 #[serde(rename = "PageLayout")]
156 pub page_layout: Option<String>,
157 #[serde(rename = "TabDisplay")]
159 pub tab_display: Option<String>,
160 #[serde(rename = "HideToolbar")]
162 pub hide_toolbar: Option<bool>,
163 #[serde(rename = "HideMenubar")]
165 pub hide_menubar: Option<bool>,
166 #[serde(rename = "HideWindowUI")]
168 pub hide_window_ui: Option<bool>,
169 #[serde(rename = "ZoomMode")]
171 pub zoom_mode: Option<String>,
172 #[serde(rename = "Zoom")]
174 pub zoom: Option<f64>,
175}
176
177#[derive(Debug, Clone, Default, Deserialize, Serialize)]
179pub struct Bookmarks {
180 #[serde(rename = "Bookmark", default)]
182 pub bookmarks: Vec<CtBookmark>,
183}
184
185#[derive(Debug, Clone, Default, Deserialize, Serialize)]
187pub struct CtBookmark {
188 #[serde(rename = "@Name")]
190 pub name: String,
191 #[serde(rename = "Dest")]
193 pub dest: Option<CtDest>,
194}
195
196#[derive(Debug, Clone, Default, Deserialize, Serialize)]
198pub struct Outlines {
199 #[serde(rename = "OutlineElem", default)]
201 pub outline_elems: Vec<CtOutlineElem>,
202}
203
204#[derive(Debug, Clone, Default, Deserialize, Serialize)]
206pub struct CtOutlineElem {
207 #[serde(rename = "@Title")]
209 pub title: String,
210 #[serde(rename = "@Count")]
212 pub count: Option<i64>,
213 #[serde(rename = "@Expanded")]
215 pub expanded: Option<bool>,
216 #[serde(rename = "Actions")]
218 pub actions: Option<Actions>,
219 #[serde(rename = "OutlineElem", default)]
221 pub children: Vec<CtOutlineElem>,
222}