summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2022-11-09 13:09:17 +0200
committerLars Wirzenius <liw@liw.fi>2022-11-09 13:22:42 +0200
commite93a903cb50deaf4ae7f9055be4730e1f27e698a (patch)
tree5085be895b8704f2b36989f2dcb09817e8ce1640
parent7aacf10a296b0286685c4ff64d9d3bc8333bdbc2 (diff)
downloadriki-e93a903cb50deaf4ae7f9055be4730e1f27e698a.tar.gz
refactor: processing a directive returns Processed type, not String
This paves way for non-Markdown placeholders that can be post-processed. Sponsored-by: author
-rw-r--r--src/directive/mod.rs11
-rw-r--r--src/wikitext.rs9
2 files changed, 14 insertions, 6 deletions
diff --git a/src/directive/mod.rs b/src/directive/mod.rs
index e33f572..5bc8ef6 100644
--- a/src/directive/mod.rs
+++ b/src/directive/mod.rs
@@ -6,6 +6,10 @@ use crate::wikitext::ParsedDirective;
use log::{debug, trace};
use std::collections::HashSet;
+pub enum Processed {
+ Markdown(String),
+}
+
#[derive(Debug, Eq, PartialEq)]
pub enum Directive {
Simple,
@@ -204,8 +208,8 @@ impl Directive {
Ok(())
}
- pub fn process(&self, site: &mut Site, meta: &mut PageMeta) -> Result<String, SiteError> {
- match self {
+ pub fn process(&self, site: &mut Site, meta: &mut PageMeta) -> Result<Processed, SiteError> {
+ let markdown = match self {
Self::Simple
| Self::UnnamedArg
| Self::SimpleArg
@@ -227,7 +231,8 @@ impl Directive {
Self::Tag(x) => x.process(site, meta),
Self::Toc(x) => x.process(site, meta),
Self::TrailLink(x) => x.process(site, meta),
- }
+ };
+ Ok(Processed::Markdown(markdown?))
}
}
diff --git a/src/wikitext.rs b/src/wikitext.rs
index 81514f0..25da818 100644
--- a/src/wikitext.rs
+++ b/src/wikitext.rs
@@ -1,4 +1,4 @@
-use crate::directive::Directive;
+use crate::directive::{Directive, Processed};
use crate::error::SiteError;
use crate::page::PageMeta;
use crate::site::Site;
@@ -43,8 +43,11 @@ 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)))?
+ let processed = d.process(site, meta)
+ .map_err(|e| SiteError::PageProblem(meta.path().into(), Box::new(e)))?;
+ match processed {
+ Processed::Markdown(s) => s,
+ }
} else if let Some(shortcut) = site.shortcut(p.name()) {
let arg = p.unnamed_args().first().unwrap().to_string();
format!("[{}]({})", shortcut.desc(&arg), shortcut.url(&arg))