diff options
author | Lars Wirzenius <liw@liw.fi> | 2023-01-07 13:04:10 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2023-01-07 13:04:10 +0200 |
commit | 6ec78063e5173ae39db84976acce31c79e32c138 (patch) | |
tree | 9ae496927cfae18e5ba67b3d74f62864f0805137 | |
parent | 211325a35cf86db46d7a4940e1179fe024bc9ec9 (diff) | |
download | riki-6ec78063e5173ae39db84976acce31c79e32c138.tar.gz |
refactor: simplify error dependencies a bit
Sponsored-by: author
-rw-r--r-- | src/page.rs | 46 | ||||
-rw-r--r-- | src/site.rs | 12 |
2 files changed, 39 insertions, 19 deletions
diff --git a/src/page.rs b/src/page.rs index 94b74bd..db0dc96 100644 --- a/src/page.rs +++ b/src/page.rs @@ -1,11 +1,11 @@ use crate::directive::{Processed, Toc}; -use crate::error::RikiError; +use crate::html::HtmlError; use crate::html::{parse, Content, Element, ElementTag, HtmlPage}; use crate::name::Name; use crate::parser::WikitextParser; use crate::site::Site; use crate::util::get_mtime; -use crate::wikitext::Snippet; +use crate::wikitext::{Snippet, WikitextError}; use log::{info, trace}; use std::path::{Path, PathBuf}; use std::time::SystemTime; @@ -17,6 +17,30 @@ pub enum PageError { #[error("could not convert input text from {0} to UTF-8")] Utf8(PathBuf, #[source] std::string::FromUtf8Error), + + #[error(transparent)] + Util(#[from] crate::util::UtilError), + + #[error(transparent)] + Wikitext(#[from] Box<crate::wikitext::WikitextError>), + + #[error(transparent)] + Html(#[from] Box<HtmlError>), + + #[error(transparent)] + Riki(#[from] Box<crate::error::RikiError>), +} + +impl From<WikitextError> for PageError { + fn from(e: WikitextError) -> Self { + Self::Wikitext(Box::new(e)) + } +} + +impl From<HtmlError> for PageError { + fn from(e: HtmlError) -> Self { + Self::Html(Box::new(e)) + } } pub struct Page { @@ -33,7 +57,7 @@ impl Page { &self.meta } - pub fn markdown(&self, site: &mut Site) -> Result<MarkdownPage, RikiError> { + pub fn markdown(&self, site: &mut Site) -> Result<MarkdownPage, PageError> { self.unprocessed.process(site) } } @@ -49,7 +73,7 @@ impl WikitextPage { Self { meta, wikitext } } - pub fn read(name: &Name) -> Result<Self, RikiError> { + pub fn read(name: &Name) -> Result<Self, PageError> { info!("input file: {}", name); let src = name.source_path(); @@ -84,7 +108,7 @@ pub struct UnprocessedPage { } impl UnprocessedPage { - pub fn new(meta: PageMeta, parser: &mut WikitextParser) -> Result<Self, RikiError> { + pub fn new(meta: PageMeta, parser: &mut WikitextParser) -> Result<Self, PageError> { Ok(Self { meta, snippets: Self::snippets(parser)?, @@ -95,15 +119,15 @@ impl UnprocessedPage { &self.meta } - fn snippets(parser: &mut WikitextParser) -> Result<Vec<Snippet>, RikiError> { + fn snippets(parser: &mut WikitextParser) -> Result<Vec<Snippet>, PageError> { let mut snippets = vec![]; - while let Some(snippet) = parser.parse()? { + while let Some(snippet) = parser.parse().map_err(|e| PageError::Riki(Box::new(e)))? { snippets.push(snippet); } Ok(snippets) } - pub fn prepare(&self, site: &mut Site) -> Result<(), RikiError> { + pub fn prepare(&self, site: &mut Site) -> Result<(), PageError> { trace!("UnprocessedPage: preparing snippets"); for snippet in self.snippets.iter() { snippet.prepare(site)?; @@ -111,7 +135,7 @@ impl UnprocessedPage { Ok(()) } - pub fn process(&self, site: &mut Site) -> Result<MarkdownPage, RikiError> { + pub fn process(&self, site: &mut Site) -> Result<MarkdownPage, PageError> { let mut meta = self.meta.clone(); let mut processed = vec![]; trace!("UnprocessedPage: processing snippets"); @@ -157,13 +181,13 @@ impl MarkdownPage { &self.meta } - pub fn body_to_html(&self) -> Result<HtmlPage, RikiError> { + pub fn body_to_html(&self) -> Result<HtmlPage, PageError> { let head = Element::new(ElementTag::Head); let body = parse(self.markdown())?; Ok(HtmlPage::new(head, body)) } - pub fn to_html(&self) -> Result<HtmlPage, RikiError> { + pub fn to_html(&self) -> Result<HtmlPage, PageError> { let mut title = Element::new(ElementTag::Title); title.push_child(Content::Text(self.meta.title().into())); diff --git a/src/site.rs b/src/site.rs index 03cff51..6fa26d9 100644 --- a/src/site.rs +++ b/src/site.rs @@ -66,7 +66,7 @@ impl Site { if name.is_wikitext_page() { trace!("scan: it's a page"); debug!("loading wikitext page {}", name.source_path().display()); - let page = WikitextPage::read(&name).map_err(|e| SiteError::Riki(Box::new(e)))?; + let page = WikitextPage::read(&name)?; self.files.insert(name); self.add_wikitextpage(page)?; } else { @@ -86,10 +86,8 @@ impl Site { debug!("parsing wikitext page {}", page.meta().path().display()); let mut parser = WikitextParser::new(page.wikitext(), &self.patterns); - let page = UnprocessedPage::new(page.meta().clone(), &mut parser) - .map_err(|e| SiteError::Riki(Box::new(e)))?; - page.prepare(self) - .map_err(|e| SiteError::Riki(Box::new(e)))?; + let page = UnprocessedPage::new(page.meta().clone(), &mut parser)?; + page.prepare(self)?; let page = Page::new(page.meta().clone(), page); self.pages.push(page); @@ -119,9 +117,7 @@ impl Site { "processing unprocessed page {}", page.meta().path().display() ); - let page = page - .markdown(self) - .map_err(|e| SiteError::Riki(Box::new(e)))?; + let page = page.markdown(self)?; self.markdown_pages.push(page); Ok(true) } else { |