summaryrefslogtreecommitdiff
path: root/src/page.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/page.rs')
-rw-r--r--src/page.rs48
1 files changed, 33 insertions, 15 deletions
diff --git a/src/page.rs b/src/page.rs
index a8d60a5..d84721c 100644
--- a/src/page.rs
+++ b/src/page.rs
@@ -1,5 +1,4 @@
use crate::directive::{Processed, Toc};
-use crate::error::SiteError;
use crate::html::{parse, Content, Element, ElementTag, HtmlPage};
use crate::name::Name;
use crate::parser::WikitextParser;
@@ -10,6 +9,27 @@ use log::{info, trace};
use std::path::{Path, PathBuf};
use std::time::SystemTime;
+#[derive(Debug, thiserror::Error)]
+pub enum PageError {
+ #[error("could not read file: {0}")]
+ FileRead(PathBuf, #[source] std::io::Error),
+
+ #[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] crate::wikitext::WikitextError),
+
+ #[error(transparent)]
+ Html(#[from] crate::html::HtmlError),
+
+ #[error(transparent)]
+ Parser(#[from] crate::parser::ParserError),
+}
+
pub struct Page {
meta: PageMeta,
unprocessed: UnprocessedPage,
@@ -24,7 +44,7 @@ impl Page {
&self.meta
}
- pub fn markdown(&self, site: &mut Site) -> Result<MarkdownPage, SiteError> {
+ pub fn markdown(&self, site: &mut Site) -> Result<MarkdownPage, PageError> {
self.unprocessed.process(site)
}
}
@@ -40,12 +60,12 @@ impl WikitextPage {
Self { meta, wikitext }
}
- pub fn read(name: &Name) -> Result<Self, SiteError> {
+ pub fn read(name: &Name) -> Result<Self, PageError> {
info!("input file: {}", name);
let src = name.source_path();
- let data = std::fs::read(src).map_err(|e| SiteError::FileRead(src.into(), e))?;
- let wikitext = String::from_utf8(data).map_err(|e| SiteError::Utf8(src.into(), e))?;
+ let data = std::fs::read(src).map_err(|e| PageError::FileRead(src.into(), e))?;
+ let wikitext = String::from_utf8(data).map_err(|e| PageError::Utf8(src.into(), e))?;
let mtime = get_mtime(src)?;
let meta = MetaBuilder::default()
@@ -75,7 +95,7 @@ pub struct UnprocessedPage {
}
impl UnprocessedPage {
- pub fn new(meta: PageMeta, parser: &mut WikitextParser) -> Result<Self, SiteError> {
+ pub fn new(meta: PageMeta, parser: &mut WikitextParser) -> Result<Self, PageError> {
Ok(Self {
meta,
snippets: Self::snippets(parser)?,
@@ -86,7 +106,7 @@ impl UnprocessedPage {
&self.meta
}
- fn snippets(parser: &mut WikitextParser) -> Result<Vec<Snippet>, SiteError> {
+ fn snippets(parser: &mut WikitextParser) -> Result<Vec<Snippet>, PageError> {
let mut snippets = vec![];
while let Some(snippet) = parser.parse()? {
snippets.push(snippet);
@@ -94,7 +114,7 @@ impl UnprocessedPage {
Ok(snippets)
}
- pub fn prepare(&self, site: &mut Site) -> Result<(), SiteError> {
+ pub fn prepare(&self, site: &mut Site) -> Result<(), PageError> {
trace!("UnprocessedPage: preparing snippets");
for snippet in self.snippets.iter() {
snippet.prepare(site)?;
@@ -102,7 +122,7 @@ impl UnprocessedPage {
Ok(())
}
- pub fn process(&self, site: &mut Site) -> Result<MarkdownPage, SiteError> {
+ pub fn process(&self, site: &mut Site) -> Result<MarkdownPage, PageError> {
let mut meta = self.meta.clone();
let mut processed = vec![];
trace!("UnprocessedPage: processing snippets");
@@ -148,22 +168,20 @@ impl MarkdownPage {
&self.meta
}
- pub fn body_to_html(&self) -> Result<HtmlPage, SiteError> {
+ pub fn body_to_html(&self) -> Result<HtmlPage, PageError> {
let head = Element::new(ElementTag::Head);
- let body = parse(self.markdown())
- .map_err(|e| SiteError::PageProblem(self.meta.path().into(), Box::new(e.into())))?;
+ let body = parse(self.markdown())?;
Ok(HtmlPage::new(head, body))
}
- pub fn to_html(&self) -> Result<HtmlPage, SiteError> {
+ pub fn to_html(&self) -> Result<HtmlPage, PageError> {
let mut title = Element::new(ElementTag::Title);
title.push_child(Content::Text(self.meta.title().into()));
let mut head = Element::new(ElementTag::Head);
head.push_child(Content::Elt(title));
- let body = parse(self.markdown())
- .map_err(|e| SiteError::PageProblem(self.meta.path().into(), Box::new(e.into())))?;
+ let body = parse(self.markdown())?;
trace!("MarkdownPage::to_html: head={:?}", head);
Ok(HtmlPage::new(head, body))