summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2023-01-07 13:04:10 +0200
committerLars Wirzenius <liw@liw.fi>2023-01-07 13:04:10 +0200
commit6ec78063e5173ae39db84976acce31c79e32c138 (patch)
tree9ae496927cfae18e5ba67b3d74f62864f0805137
parent211325a35cf86db46d7a4940e1179fe024bc9ec9 (diff)
downloadriki-6ec78063e5173ae39db84976acce31c79e32c138.tar.gz
refactor: simplify error dependencies a bit
Sponsored-by: author
-rw-r--r--src/page.rs46
-rw-r--r--src/site.rs12
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 {