diff options
author | Lars Wirzenius <liw@liw.fi> | 2022-11-09 13:09:17 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2022-11-09 13:22:42 +0200 |
commit | e93a903cb50deaf4ae7f9055be4730e1f27e698a (patch) | |
tree | 5085be895b8704f2b36989f2dcb09817e8ce1640 | |
parent | 7aacf10a296b0286685c4ff64d9d3bc8333bdbc2 (diff) | |
download | riki-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.rs | 11 | ||||
-rw-r--r-- | src/wikitext.rs | 9 |
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)) |