From e93a903cb50deaf4ae7f9055be4730e1f27e698a Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Wed, 9 Nov 2022 13:09:17 +0200 Subject: refactor: processing a directive returns Processed type, not String This paves way for non-Markdown placeholders that can be post-processed. Sponsored-by: author --- src/directive/mod.rs | 11 ++++++++--- 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 { - match self { + pub fn process(&self, site: &mut Site, meta: &mut PageMeta) -> Result { + 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)) -- cgit v1.2.1