easyofd_core/doc/
pages.rs1#[derive(Debug, Clone, Default, PartialEq)]
12pub struct Pages {
13 pub pages: Vec<PageEntry>,
15}
16
17#[derive(Debug, Clone, PartialEq)]
19pub struct PageEntry {
20 pub id: u32,
22 pub base_loc: String,
24}
25
26impl PageEntry {
27 #[must_use]
29 pub fn new(id: u32, base_loc: impl Into<String>) -> Self {
30 Self {
31 id,
32 base_loc: base_loc.into(),
33 }
34 }
35}
36
37impl Pages {
38 #[must_use]
40 pub fn new() -> Self {
41 Self::default()
42 }
43
44 pub fn add_page(&mut self, entry: PageEntry) {
46 self.pages.push(entry);
47 }
48
49 #[must_use]
51 pub fn len(&self) -> usize {
52 self.pages.len()
53 }
54
55 #[must_use]
57 pub fn is_empty(&self) -> bool {
58 self.pages.is_empty()
59 }
60
61 #[must_use]
63 pub fn get(&self, index: usize) -> Option<&PageEntry> {
64 self.pages.get(index)
65 }
66}
67
68#[cfg(test)]
69mod tests {
70 use super::*;
71
72 #[test]
73 fn pages_new() {
74 let p = Pages::new();
75 assert!(p.is_empty());
76 assert_eq!(p.len(), 0);
77 }
78
79 #[test]
80 fn pages_add_page() {
81 let mut p = Pages::new();
82 p.add_page(PageEntry::new(1, "Pages/Page_0.xml"));
83 p.add_page(PageEntry::new(2, "Pages/Page_1.xml"));
84 assert_eq!(p.len(), 2);
85 assert!(!p.is_empty());
86 }
87
88 #[test]
89 fn pages_get() {
90 let mut p = Pages::new();
91 p.add_page(PageEntry::new(1, "Pages/Page_0.xml"));
92 let entry = p.get(0).unwrap();
93 assert_eq!(entry.id, 1);
94 assert_eq!(entry.base_loc, "Pages/Page_0.xml");
95 assert!(p.get(1).is_none());
96 }
97
98 #[test]
99 fn page_entry_new() {
100 let pe = PageEntry::new(5, "Pages/Page_4.xml");
101 assert_eq!(pe.id, 5);
102 assert_eq!(pe.base_loc, "Pages/Page_4.xml");
103 }
104
105 #[test]
106 fn pages_clone_debug() {
107 let p = Pages::new();
108 let p2 = p.clone();
109 assert!(p2.is_empty());
110 assert!(format!("{p:?}").contains("Pages"));
111 }
112}