diff options
Diffstat (limited to 'src/page.rs')
-rw-r--r-- | src/page.rs | 46 |
1 files changed, 35 insertions, 11 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())); |