diff options
author | Lars Wirzenius <liw@liw.fi> | 2023-05-14 11:10:25 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2023-05-14 11:10:25 +0300 |
commit | e849cf9d8f5d93166722f47891813cd99ef8f352 (patch) | |
tree | b6e8d9dd4b416c9deebebc3eb1a029cbb87303cf | |
parent | 51c086c3c7091364842a93ba3e8d2171a7ad89dc (diff) | |
download | riki-e849cf9d8f5d93166722f47891813cd99ef8f352.tar.gz |
refactor: make Site::markdown_pages be a hash map instead of vector
Sponsored-by: author
-rw-r--r-- | src/bin/riki.rs | 2 | ||||
-rw-r--r-- | src/directive/inline.rs | 1 | ||||
-rw-r--r-- | src/directive/map.rs | 1 | ||||
-rw-r--r-- | src/directive/pagestats.rs | 1 | ||||
-rw-r--r-- | src/site.rs | 15 |
5 files changed, 9 insertions, 11 deletions
diff --git a/src/bin/riki.rs b/src/bin/riki.rs index d219803..946051f 100644 --- a/src/bin/riki.rs +++ b/src/bin/riki.rs @@ -109,7 +109,7 @@ impl Build { let mut site = Site::new(&srcdir, &destdir); site.scan()?; site.process()?; - debug!("markdown file count: {}", site.markdown_pages().len()); + debug!("markdown file count: {}", site.markdown_pages().count()); for page in site.markdown_pages() { let htmlpage = if self.plain_body { diff --git a/src/directive/inline.rs b/src/directive/inline.rs index 973890b..7c0114b 100644 --- a/src/directive/inline.rs +++ b/src/directive/inline.rs @@ -41,7 +41,6 @@ impl DirectiveImplementation for Inline { let pagespec = PageSpec::new(meta.path(), &self.pages).map_err(DirectiveError::PageSpec)?; let matches: Vec<String> = site .markdown_pages() - .iter() .filter(|page| pagespec.matches(site, page.meta().path())) .map(|page| format!("* {}\n", Self::link(meta.path(), page.meta()))) .collect(); diff --git a/src/directive/map.rs b/src/directive/map.rs index a2f43a6..a7ee3b2 100644 --- a/src/directive/map.rs +++ b/src/directive/map.rs @@ -26,7 +26,6 @@ impl DirectiveImplementation for Map { let pagespec = PageSpec::new(meta.path(), &self.pages).map_err(DirectiveError::PageSpec)?; let matches: Vec<String> = site .markdown_pages() - .iter() .filter(|page| pagespec.matches(site, page.meta().path())) .map(|page| format!("* {}\n", Self::link(meta.path(), page.meta()))) .collect(); diff --git a/src/directive/pagestats.rs b/src/directive/pagestats.rs index 8c7feec..0d34a77 100644 --- a/src/directive/pagestats.rs +++ b/src/directive/pagestats.rs @@ -26,7 +26,6 @@ impl DirectiveImplementation for PageStats { let pagespec = PageSpec::new(meta.path(), &self.pages).map_err(DirectiveError::PageSpec)?; let matches: Vec<String> = site .markdown_pages() - .iter() .filter(|page| pagespec.matches(site, page.meta().path())) .map(|page| format!("* {}\n", Self::link(meta.path(), page.meta()))) .collect(); diff --git a/src/site.rs b/src/site.rs index cfd5017..64b9602 100644 --- a/src/site.rs +++ b/src/site.rs @@ -45,7 +45,7 @@ pub struct Site { shortcuts: HashMap<String, Shortcut>, name_builder: NameBuilder, pages: Vec<Page>, - markdown_pages: Vec<MarkdownPage>, + markdown_pages: HashMap<PathBuf, MarkdownPage>, pages_that_will_exist: PageSet, files: Names, } @@ -61,7 +61,7 @@ impl Site { Self { name_builder: NameBuilder::new(srcdir.as_ref(), destdir.as_ref()), pages: vec![], - markdown_pages: vec![], + markdown_pages: HashMap::new(), files: Names::default(), patterns: TokenPatterns::default(), pages_that_will_exist: PageSet::default(), @@ -127,7 +127,7 @@ impl Site { page.meta().path().display() ); let page = page.markdown(self)?; - self.markdown_pages.push(page); + self.markdown_pages.insert(page.meta().path().into(), page); Ok(true) } else { trace!("no pages to process"); @@ -135,8 +135,8 @@ impl Site { } } - pub fn markdown_pages(&self) -> &[MarkdownPage] { - &self.markdown_pages + pub fn markdown_pages(&self) -> impl Iterator<Item=&MarkdownPage> { + self.markdown_pages.iter().map(|(_, md)| md) } pub fn files_only(&self) -> impl Iterator<Item = &Name> { @@ -154,7 +154,8 @@ impl Site { pub fn page(&self, path: &Path) -> Option<&MarkdownPage> { self.markdown_pages .iter() - .find(|&page| page.meta().path() == path) + .find(|(page_path, _)| page_path.as_path() == path) + .map(|(_, md)| md) } fn all_files(&self) -> Result<Vec<Name>, SiteError> { @@ -371,7 +372,7 @@ mod test { #[test] fn has_no_pages_initially() { - assert_eq!(site().markdown_pages().to_vec(), vec![]); + assert_eq!(site().markdown_pages().count(), 0); } #[test] |