summaryrefslogtreecommitdiff
path: root/src/wikitext.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/wikitext.rs')
-rw-r--r--src/wikitext.rs29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/wikitext.rs b/src/wikitext.rs
index b78cd66..4d8578a 100644
--- a/src/wikitext.rs
+++ b/src/wikitext.rs
@@ -1,11 +1,19 @@
use crate::directive::{Directive, Processed};
-use crate::error::SiteError;
use crate::page::PageMeta;
use crate::site::Site;
use log::trace;
use std::collections::HashMap;
use std::path::Path;
+#[derive(Debug, thiserror::Error)]
+pub enum WikitextError {
+ #[error(transparent)]
+ Directive(#[from] crate::directive::DirectiveError),
+
+ #[error(transparent)]
+ Site(#[from] crate::site::SiteError),
+}
+
#[derive(Debug, Eq, PartialEq)]
pub enum Snippet {
Markdown(String),
@@ -14,7 +22,7 @@ pub enum Snippet {
}
impl Snippet {
- pub fn prepare(&self, site: &mut Site) -> Result<(), SiteError> {
+ pub fn prepare(&self, site: &mut Site) -> Result<(), WikitextError> {
trace!("prepare snippet {:?}", self);
if let Snippet::Directive(p) = self {
trace!("creating directive from parsed directive");
@@ -29,14 +37,16 @@ impl Snippet {
Ok(())
}
- pub fn process(&self, site: &mut Site, meta: &mut PageMeta) -> Result<Processed, SiteError> {
+ pub fn process(
+ &self,
+ site: &mut Site,
+ meta: &mut PageMeta,
+ ) -> Result<Processed, WikitextError> {
trace!("Snippet::process: self={:?}", self);
let processed = match self {
Snippet::Markdown(text) => Processed::Markdown(text.into()),
Snippet::WikiLink(w) => {
- let resolved = site
- .resolve(meta.path(), Path::new(w.target()))
- .map_err(|e| SiteError::PageProblem(meta.path().into(), Box::new(e)))?;
+ let resolved = site.resolve(meta.path(), Path::new(w.target()))?;
trace!("resolved {} to {}", w.target(), resolved.display());
let link = format!("[{}]({})", w.link_text(), resolved.display());
Processed::Markdown(link)
@@ -44,14 +54,13 @@ impl Snippet {
Snippet::Directive(p) => {
let e = Directive::try_from(p);
if let Ok(d) = e {
- d.process(site, meta)
- .map_err(|e| SiteError::PageProblem(meta.path().into(), Box::new(e)))?
+ d.process(site, meta)?
} else if let Some(shortcut) = site.shortcut(p.name()) {
let arg = p.unnamed_args().first().unwrap().to_string();
let link = format!("[{}]({})", shortcut.desc(&arg), shortcut.url(&arg));
Processed::Markdown(link)
} else {
- return Err(e.unwrap_err());
+ return Err(e.unwrap_err().into());
}
}
};
@@ -89,7 +98,7 @@ pub struct ParsedDirective {
}
impl ParsedDirective {
- pub fn new(name: &str, args: HashMap<String, String>) -> Result<Self, SiteError> {
+ pub fn new(name: &str, args: HashMap<String, String>) -> Result<Self, WikitextError> {
trace!("ParsedDirective::new: name={:?} args={:?}", name, args);
Ok(Self {
name: name.into(),