1use serde::{Deserialize, Serialize};
12
13use crate::model::common::Actions;
14use crate::model::document::CtPageArea;
15use crate::model::graphics::PageBlock;
16use crate::types::{StId, StLoc, StRefId};
17
18#[derive(Debug, Clone, Default, Deserialize, Serialize)]
20pub struct Pages {
21 #[serde(rename = "Page", default)]
23 pub pages: Vec<PageRef>,
24}
25
26#[derive(Debug, Clone, Default, Deserialize, Serialize)]
31pub struct PageRef {
32 #[serde(rename = "@ID")]
34 pub id: StId,
35 #[serde(rename = "@BaseLoc")]
37 pub base_loc: StLoc,
38}
39
40#[derive(Debug, Clone, Default, Deserialize, Serialize)]
42pub struct PageObject {
43 #[serde(rename = "Template", default)]
45 pub templates: Vec<Template>,
46 #[serde(rename = "Area")]
48 pub area: Option<CtPageArea>,
49 #[serde(rename = "PageRes", default)]
51 pub page_res: Vec<StLoc>,
52 #[serde(rename = "Content")]
54 pub content: Option<Content>,
55 #[serde(rename = "Actions")]
57 pub actions: Option<Actions>,
58}
59
60impl PageObject {
61 pub fn is_blank(&self) -> bool {
63 self.content.is_none()
64 }
65}
66
67#[derive(Debug, Clone, Default, Deserialize, Serialize)]
69pub struct Template {
70 #[serde(rename = "@TemplateID")]
72 pub template_id: StRefId,
73 #[serde(rename = "@ZOrder")]
75 pub z_order: Option<String>,
76}
77
78#[derive(Debug, Clone, Default, Deserialize, Serialize)]
80pub struct Content {
81 #[serde(rename = "Layer", default)]
83 pub layers: Vec<CtLayer>,
84}
85
86#[derive(Debug, Clone, Default, Deserialize, Serialize)]
92pub struct CtLayer {
93 #[serde(rename = "@ID")]
95 pub id: Option<StId>,
96 #[serde(rename = "@Type")]
98 pub layer_type: Option<String>,
99 #[serde(rename = "@DrawParam")]
101 pub draw_param: Option<StRefId>,
102 #[serde(rename = "$value", default)]
104 pub objects: Vec<PageBlock>,
105}
106
107#[derive(Debug, Clone, Default, Deserialize, Serialize)]
111pub struct CtTemplatePage {
112 #[serde(rename = "@ID")]
114 pub id: StId,
115 #[serde(rename = "@BaseLoc")]
117 pub base_loc: StLoc,
118 #[serde(rename = "@Name")]
120 pub name: Option<String>,
121 #[serde(rename = "@ZOrder")]
123 pub z_order: Option<String>,
124}