summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2023-05-14 11:10:25 +0300
committerLars Wirzenius <liw@liw.fi>2023-05-14 11:10:25 +0300
commite849cf9d8f5d93166722f47891813cd99ef8f352 (patch)
treeb6e8d9dd4b416c9deebebc3eb1a029cbb87303cf
parent51c086c3c7091364842a93ba3e8d2171a7ad89dc (diff)
downloadriki-e849cf9d8f5d93166722f47891813cd99ef8f352.tar.gz
refactor: make Site::markdown_pages be a hash map instead of vector
Sponsored-by: author
-rw-r--r--src/bin/riki.rs2
-rw-r--r--src/directive/inline.rs1
-rw-r--r--src/directive/map.rs1
-rw-r--r--src/directive/pagestats.rs1
-rw-r--r--src/site.rs15
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]