use crate::error::SiteError; use crate::page::PageMeta; use crate::site::Site; use crate::wikitext::ParsedDirective; use log::trace; use std::path::Path; #[derive(Debug, Eq, PartialEq)] pub struct Img { src: String, } impl Img { pub const REQUIRED: &'static [&'static str] = &[]; pub const ALLOWED: &'static [&'static str] = &["alt", "class", "link"]; pub const ALLOW_ANY_UNNAMED: bool = true; pub fn new(src: String) -> Self { Self { src } } pub fn process(&self, site: &Site, meta: &mut PageMeta) -> Result { trace!("verify image exists: {}", self.src); let src = site.resolve(meta.path(), Path::new(&self.src))?; trace!("img src={:?}", src.display()); Ok(format!("![]({})", self.src)) } } impl From for Img { fn from(p: ParsedDirective) -> Self { let unnamed = p.unnamed_args().pop().unwrap(); Img::new(unnamed.into()) } }