#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum TemplateZOrder {
Background,
Body,
Foreground,
}
impl TemplateZOrder {
#[must_use]
pub fn order(&self) -> i32 {
match self {
Self::Background => 0,
Self::Body => 1,
Self::Foreground => 2,
}
}
}
#[derive(Debug, Clone)]
pub struct TemplatePageEntity {
pub id: String,
pub name: Option<String>,
pub z_order: TemplateZOrder,
pub base_loc: String,
}
impl TemplatePageEntity {
#[must_use]
pub fn new(
id: impl Into<String>,
z_order: TemplateZOrder,
base_loc: impl Into<String>,
) -> Self {
Self {
id: id.into(),
name: None,
z_order,
base_loc: base_loc.into(),
}
}
#[must_use]
pub fn with_name(mut self, name: impl Into<String>) -> Self {
self.name = Some(name.into());
self
}
pub fn set_z_order(&mut self, z_order: TemplateZOrder) {
self.z_order = z_order;
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_template_z_order_ordering() {
assert!(TemplateZOrder::Background.order() < TemplateZOrder::Body.order());
assert!(TemplateZOrder::Body.order() < TemplateZOrder::Foreground.order());
}
#[test]
fn test_template_page_entity_new() {
let entity =
TemplatePageEntity::new("tpl_0", TemplateZOrder::Body, "Pages/Page_0/Content.xml");
assert_eq!(entity.id, "tpl_0");
assert_eq!(entity.z_order, TemplateZOrder::Body);
assert_eq!(entity.base_loc, "Pages/Page_0/Content.xml");
assert!(entity.name.is_none());
}
#[test]
fn test_template_page_entity_with_name() {
let entity = TemplatePageEntity::new("tpl_1", TemplateZOrder::Background, "tpl.xml")
.with_name("Header Template");
assert_eq!(entity.name.as_deref(), Some("Header Template"));
}
#[test]
fn test_template_page_entity_set_z_order() {
let mut entity = TemplatePageEntity::new("tpl_0", TemplateZOrder::Body, "tpl.xml");
entity.set_z_order(TemplateZOrder::Foreground);
assert_eq!(entity.z_order, TemplateZOrder::Foreground);
}
}