use serde::{Deserialize, Serialize};
use crate::model::common::Actions;
use crate::model::document::CtPageArea;
use crate::model::graphics::PageBlock;
use crate::types::{StId, StLoc, StRefId};
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Pages {
#[serde(rename = "Page", default)]
pub pages: Vec<PageRef>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PageRef {
#[serde(rename = "@ID")]
pub id: StId,
#[serde(rename = "@BaseLoc")]
pub base_loc: StLoc,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct PageObject {
#[serde(rename = "Template", default)]
pub templates: Vec<Template>,
#[serde(rename = "Area")]
pub area: Option<CtPageArea>,
#[serde(rename = "PageRes", default)]
pub page_res: Vec<StLoc>,
#[serde(rename = "Content")]
pub content: Option<Content>,
#[serde(rename = "Actions")]
pub actions: Option<Actions>,
}
impl PageObject {
pub fn is_blank(&self) -> bool {
self.content.is_none()
}
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Template {
#[serde(rename = "@TemplateID")]
pub template_id: StRefId,
#[serde(rename = "@ZOrder")]
pub z_order: Option<String>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct Content {
#[serde(rename = "Layer", default)]
pub layers: Vec<CtLayer>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct CtLayer {
#[serde(rename = "@ID")]
pub id: Option<StId>,
#[serde(rename = "@Type")]
pub layer_type: Option<String>,
#[serde(rename = "@DrawParam")]
pub draw_param: Option<StRefId>,
#[serde(rename = "$value", default)]
pub objects: Vec<PageBlock>,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct CtTemplatePage {
#[serde(rename = "@ID")]
pub id: StId,
#[serde(rename = "@BaseLoc")]
pub base_loc: StLoc,
#[serde(rename = "@Name")]
pub name: Option<String>,
#[serde(rename = "@ZOrder")]
pub z_order: Option<String>,
}