summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2023-05-14 11:23:42 +0300
committerLars Wirzenius <liw@liw.fi>2023-05-14 11:23:42 +0300
commit5401d34c7975dbbbbbd833240bcab98dc3e38f65 (patch)
treeafb781cf257aec99ae010ab06ca7ab127fae889e
parente849cf9d8f5d93166722f47891813cd99ef8f352 (diff)
downloadriki-5401d34c7975dbbbbbd833240bcab98dc3e38f65.tar.gz
refactor: rename and turn Site::pages into HashMap
Sponsored-by: author
-rw-r--r--src/lib.rs2
-rw-r--r--src/site.rs22
2 files changed, 17 insertions, 7 deletions
diff --git a/src/lib.rs b/src/lib.rs
index be6e4a9..bca0992 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -20,5 +20,5 @@ pub mod srcdir;
pub mod time;
pub mod token;
pub mod util;
-pub mod wikitext;
pub mod version;
+pub mod wikitext;
diff --git a/src/site.rs b/src/site.rs
index 64b9602..ebbd339 100644
--- a/src/site.rs
+++ b/src/site.rs
@@ -44,7 +44,7 @@ pub struct Site {
patterns: TokenPatterns,
shortcuts: HashMap<String, Shortcut>,
name_builder: NameBuilder,
- pages: Vec<Page>,
+ unprocessed_pages: HashMap<PathBuf, Page>,
markdown_pages: HashMap<PathBuf, MarkdownPage>,
pages_that_will_exist: PageSet,
files: Names,
@@ -60,7 +60,7 @@ impl Site {
{
Self {
name_builder: NameBuilder::new(srcdir.as_ref(), destdir.as_ref()),
- pages: vec![],
+ unprocessed_pages: HashMap::new(),
markdown_pages: HashMap::new(),
files: Names::default(),
patterns: TokenPatterns::default(),
@@ -99,7 +99,8 @@ impl Site {
page.prepare(self)?;
let page = Page::new(page.meta().clone(), page);
- self.pages.push(page);
+ self.unprocessed_pages
+ .insert(page.meta().path().into(), page);
Ok(())
}
@@ -121,7 +122,7 @@ impl Site {
}
fn process_page(&mut self) -> Result<bool, SiteError> {
- if let Some(page) = self.pages.pop() {
+ if let Some(page) = self.pick_unprocessed_page() {
debug!(
"processing unprocessed page {}",
page.meta().path().display()
@@ -135,8 +136,17 @@ impl Site {
}
}
- pub fn markdown_pages(&self) -> impl Iterator<Item=&MarkdownPage> {
- self.markdown_pages.iter().map(|(_, md)| md)
+ fn pick_unprocessed_page(&mut self) -> Option<Page> {
+ let mut keys: Vec<PathBuf> = self.unprocessed_pages.keys().map(|k| k.into()).collect();
+ if let Some(path) = keys.pop() {
+ self.unprocessed_pages.remove(&path)
+ } else {
+ None
+ }
+ }
+
+ pub fn markdown_pages(&self) -> impl Iterator<Item = &MarkdownPage> {
+ self.markdown_pages.values()
}
pub fn files_only(&self) -> impl Iterator<Item = &Name> {